La mia raccomandazione sarebbe: "Non creare il cookie di autenticazione utilizzando JavaScript." Un cookie che identifichi una sessione autenticata dovrebbe essere contrassegnato con il flag HttpOnly per aiutare a mitigare gli attacchi XSS, e quindi deve essere creato dal server e inviato con la risposta, non creato sul client.
A parte questo consiglio, la tua ipotesi è per lo più corretta. Se non c'è una scadenza impostata sul cookie, allora è un cookie di sessione e vivrà finché il browser è aperto, e l'ID di sessione è valido. Se il server termina periodicamente le sessioni autenticate, il cookie non sarà più collegato a una sessione sul server e sarà quindi essenzialmente nullo.
Alla seconda domanda, se si desidera specificare il tempo massimo di accesso di un utente prima di dover eseguire nuovamente l'autenticazione, di solito avviene con una scadenza a rotazione, in cui la scadenza viene aggiornata con ogni richiesta da x a partire da ora, le sessioni utente attive non sono scadute forzatamente, solo sessioni inattive in cui un utente non ha effettuato una nuova richiesta negli ultimi x minuti. Il modo più sicuro per farlo è legare il valore del cookie a una sessione sul server che scade in tempo, che non può essere disturbato dall'utente. La scadenza del cookie non è sufficiente, in quanto può essere modificata dal cliente. Se è necessario archiviare un lato client di scadenza sessione, deve essere crittografato nel valore del cookie, quindi deve essere creato nuovamente lato server, non da JavaScript, poiché il server deve essere l'unico posto in cui il valore può essere decodificato in modo che sia sicuro.
E infine alla terza domanda, qual è la quantità di tempo appropriata prima di scadere una sessione? Dipende interamente dalla tua applicazione. Le applicazioni finanziarie hanno spesso timeout molto brevi di cinque o dieci minuti. Molte applicazioni hanno un timeout predefinito più tradizionale di 20 o 30 minuti. Se il flusso di lavoro della tua app richiede molto tempo su una pagina senza aggiornamento, potrebbe essere ancora più lungo. Non so che sia terribilmente importante in ogni caso, a meno che la tua applicazione non abbia esigenze di sicurezza specifiche.