2016-01-15 13 views
5

Recentemente, sto imparando circa il middleware "express-session" di espresso, voglio capire tutte le proprietà della data options.But quando ho letto sulle API di express-session, sono confuso con i treQual è esattamente il significato delle proprietà "saveUninitialized", "resave" e "rolling" in express-session?

immobili: saveUninitialized, resave e rolling.

Tutti hanno un effetto sull'impostazione dei cookie o sull'operazione di sessione, quindi qual è la differenza e la connessione di essi?

La speranza che qualcuno mi può aiutare a distinguerle,

Grazie mille!

+0

https://stackoverflow.com/questions/40381401/when-use-saveuninitialized-and-resave-in-express-session –

+0

https://stackoverflow.com/questions/31385726/whats-the-difference -tra-saveuninitialized-and-resave –

risposta

7

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.

+0

Possiamo parlare, ho qualche dubbio? –

Problemi correlati