Quando un browser moderno effettua una richiesta, aggiunge tutti i cookie che corrispondono al dominio corrente (sito Web) nell'intestazione Cookie
. Ecco un esempio di ciò che il mio browser potrebbe inviare se visito stackoverflow.com:
Cookie: acct=1234
Nessun cookie vengono inviati dal browser quando si visita un sito per la prima volta. In tal caso (e se il proprietario ha voluto utilizzare i cookie per tracciare sessioni utente, per esempio) il server comunemente rispondere con un colpo di testa Set-Cookie
, qualcosa di simile:
Set-Cookie: acct=5678; expires=Sat, 15 May 2050 15:32:57 GMT; domain=.stackoverflow.com
(Si può anche aggiungere path
, secure
e HttpOnly
opzioni, tutte spiegate here) Sto semplificando ma, per impostazione predefinita, express-session
invia solo Set-Cookie
quando si visita un sito per la prima volta.
Se rolling
è true
, verrà inviato ogni volta. Questo ha l'effetto collaterale desiderato di far avanzare continuamente la scadenza del cookie ad ogni aggiornamento della pagina. La nuova data di scadenza è determinata aggiungendo maxAge
all'ora corrente del server.
Se si modifica l'oggetto req.session
, verrà salvato nell'archivio di sessione al termine della richiesta; altrimenti non sarà salvato. L'impostazione di resave
a true
impone che venga salvata ogni volta, anche se non sono state apportate modifiche. Potrebbe sembrare illogico, ma alcuni negozi potrebbero richiedere questo (anche se, dopo aver esaminato la lista, sembra che nessuno lo faccia attualmente).
Quando un cookie viene impostato per la prima volta, un nuovo oggetto sessione viene creato in memoria e salvato nello store al termine della richiesta. Questo può richiedere molto spazio nel db se hai molte persone che visitano e poi rimbalzano senza eseguire alcuna azione significativa come l'accesso. Puoi scegliere di salvare solo le sessioni se si discostano dall'oggetto di sessione predefinito (ad es. l'ho modificato, come l'impostazione di req.session.user = user;
all'accesso) impostando saveUninitialized
su false
.
Qualcosa di cui essere consapevoli è che alcune combinazioni di questi valori (insieme ad altre) potrebbero produrre comportamenti imprevisti. Per esempio, la documentazione afferma:
Quando questa opzione [laminazione] è impostata su true ma l'opzione saveUninitialized è impostata su false, il cookie non verrà impostato su una risposta con una sessione inizializzata.
https://stackoverflow.com/questions/40381401/when-use-saveuninitialized-and-resave-in-express-session –
https://stackoverflow.com/questions/31385726/whats-the-difference -tra-saveuninitialized-and-resave –