I don't mean to be blunt, but as you're inventing your own authentication algorithm, you'll almost certainly mess it up and it will be subject to many types of attacks. I strongly suggest you study the available research papers and known cryptographic authentication algorithms before you create your own so that you know what mistakes to not make. Start with Kerberos authentication, then Zero Knowledge Proofs, then SSL/PKI.
That said, to answer your question, both the client and the server should generate nonces that are likely (or guaranteed) to be used once for your time window. Nonces are to be used Once (number once). A sufficiently large random number serves that purpose and need not be stored. Having both client and server generate a nonce (2 different nonces) means that both reduce the chance of a replay attack from the other side.
In addition, you don't want your authentication server to become an Oracle (assist an attacking client with guessing user passwords) or a spoofed server breaking user passwords (trick a client into revealing it's password), so you need to be careful how you design your algorithm. The minimum number of steps required for an authentication algorithm is four.
- c-s: hello, I'm client + nonce_c.
- s-c: client-challenge + nonce_s.
- c-s: client-response + server-challenge.
- server-response.
See the above algorithm? Client says who it is (Step 1) which includes the client nonce, then (Step 2) server asks client to prove something the server generated using both the client's nonce, a stored client authenticator (password hash, for example) and a server generated nonce. Step 3 proves the client to the server. Step 4 (which most people forget) proves the server to the client; an important step to protect your clients from spoofed server attacks (man in the middle and dns spoofing).
With this type of algorithm, you need not store nonces or worry about reusing them within some time window. Instead, make them sufficiently large and random - together the client and server participate in the creation of a nonce with sufficiently secure properties.