Quale è tipicamente la data di scadenza di un cookie di sessione?

10

Ho bisogno di creare un cookie di sessione usando JavaScript (per maggiori informazioni vedi domanda ). Mi chiedo quale dovrebbe essere la data di scadenza? Immagino che sia la sessione di navigazione, quindi se non imposto una data di scadenza questo sarà usato come predefinito, giusto? Questa sessione verrebbe utilizzata per convalidare un utente connesso. Quindi dipende da quanto tempo voglio che gli utenti rimangano loggati prima di disconnetterli automaticamente (se sì, qual è il momento giusto, o dovrebbe essere la sessione di navigazione?)?

    
posta Celeritas 03.04.2013 - 19:10
fonte

3 risposte

8

I'm guessing it's the browsing session, so if I don't set an expiration date this will be used as the default, right?

Sì. A meno che tu non abbia una particolare necessità per le sessioni di sopravvivere al riavvio del browser, ometti il parametro expires in modo che il cookie sia solo per la sessione del browser e non sia permanente sul disco.

does it depend on how long I want users to stay logged in before automatically logging them off

Questo è regolato dalla tua scadenza effettiva della sessione, che dovrebbe essere implementata solo sul lato server. Se utilizzi un expires di tempo, in genere vorrai che sia lungo almeno quanto il timeout sul lato server, ma non dovresti fare affidamento sul browser rispettando quel expires come metodo per garantire che le vecchie sessioni siano irraggiungibili .

Generalmente, i cookie di sola sessione (no- expires ) vengono utilizzati per il tracciamento della sessione, con il timeout sul lato server. Se viene effettuata una richiesta con un cookie non riconosciuto o mancante, probabilmente la sessione è scaduta sul lato server, il browser è stato chiuso sul lato client o entrambi e devi indirizzare l'utente ad avviare una nuova sessione.

Tipicamente ci sarà uno strumento di gestione delle sessioni incluso in qualunque sia il tuo framework web sul lato server che funzionerà per te inviando l'appropriato Set-Cookie di intestazioni su una risposta HTTP (o la pagina HTML iniziale, o una risposta XMLHttpRequest). Mentre potresti reimplementare la gestione delle sessioni usando solo JavaScript, i parametri passati e, ad esempio, localStorage come alternativa ai cookie, non sembra che ci sia molto da vincere reinventando quella ruota.

    
risposta data 04.04.2013 - 20:08
fonte
7

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.

    
risposta data 03.04.2013 - 19:32
fonte
2

Non sono uno sviluppatore web, quindi potrebbe non essere corretto, ma mi aspetto che tu possa semplicemente utilizzare l'intestazione Set-Cookie: nella risposta HTTP alla query AJAX per impostare il cookie di sessione.

Non è necessario passare l'ID di sessione all'interno della risposta AJAX e quindi utilizzare Javascript per impostare quel cookie. Le funzioni standard%% di %% di PHP dovrebbero gestire correttamente l'impostazione del tempo di scadenza.

Su una nota di sicurezza, HTTPOnly , Secure e SSL. Dovresti fare tutto questo.

Dovresti anche scadere le sessioni sul server sia quando l'utente si disconnette, sia dopo un certo periodo di inattività da parte dell'utente. Il periodo che scegli è un compromesso tra sicurezza e usabilità. Il valore predefinito in PHP è 1440 minuti (24 ore).

    
risposta data 03.04.2013 - 19:33
fonte

Leggi altre domande sui tag