it-swarm-eu.dev

Qual è in genere la data di scadenza di un cookie di sessione?

Devo creare un cookie di sessione utilizzando JavaScript (per ulteriori informazioni vedi domanda ). Mi chiedo quale dovrebbe essere la data di scadenza? Immagino sia la sessione di navigazione, quindi se non imposto una data di scadenza questa verrà utilizzata come predefinita, giusto? Questa sessione verrebbe utilizzata per convalidare un utente connesso. Quindi dipende da quanto tempo voglio che gli utenti rimangano connessi prima di disconnettersi automaticamente (se sì, che cosa è un buon momento, o dovrebbe essere la sessione di navigazione?)?

14
Celeritas

Immagino sia la sessione di navigazione, quindi se non imposto una data di scadenza questa verrà utilizzata come predefinita, giusto?

Sì. A meno che non sia necessario che le sessioni sopravvivano al riavvio del browser, omettere il parametro expires in modo che il cookie sia solo di sessione del browser e non persista su disco.

dipende da quanto tempo voglio che gli utenti rimangano connessi prima di disconnettersi automaticamente

Ciò è regolato dal tempo di scadenza della sessione effettiva, che deve essere implementato solo sul lato server. Se usi un expires generalmente vorresti che fosse almeno lungo il timeout sul lato server, ma non dovresti affidarti al browser che onora quel expires come metodo di garantire che le vecchie sessioni siano irraggiungibili.

Generalmente, i cookie di sola sessione (no -expires) vengono utilizzati per il monitoraggio della sessione, con 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 si dovrebbe indirizzare l'utente ad avviare una nuova sessione.

In genere ci sarà uno strumento di gestione della sessione incluso in qualunque sia il tuo framework web sul lato server che lo risolverà inviando le intestazioni appropriate Set-Cookie Su una risposta HTTP (o la pagina HTML iniziale, o una risposta XMLHttpRequest). Mentre potresti reimplementa tu stesso la gestione della sessione usando solo JavaScript, passato i parametri e, diciamo, localStorage come alternativa ai cookie, non sembra che ci sia molto da vincere reinventando quella ruota.

9
bobince

La mia raccomandazione sarebbe: "Non creare il cookie di autenticazione utilizzando JavaScript". Un cookie che identifica 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 quel consiglio, la tua ipotesi è per lo più corretta. Se il cookie non ha una scadenza impostata, è un cookie di sessione e rimarrà attivo fino a quando il browser è aperto, e il sessionid è valido. Se il server scade periodicamente le sessioni autenticate, il cookie non verrà più associato a una sessione sul server e sarà quindi sostanzialmente nullo.

Alla seconda domanda, se si desidera specificare un periodo di tempo massimo per cui un utente ha effettuato l'accesso prima di dover ripetere l'autenticazione, di solito viene eseguito con una scadenza continuativa, in cui il tempo di scadenza viene aggiornato con ogni richiesta tra x minuti da adesso , quindi 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 interferita dall'utente. La scadenza sul cookie non è sufficiente, in quanto può essere modificata dal cliente. Se è necessario archiviare un lato client con scadenza sessione, è necessario crittografarlo nel valore del cookie, quindi è necessario creare nuovamente lato server, non tramite JavaScript, poiché il server deve essere l'unico posto in cui è possibile decrittografare il valore affinché sia ​​sicuro.

E infine alla tua terza domanda, qual è il tempo adeguato prima della scadenza di una sessione? Dipende interamente dalla tua applicazione. Le applicazioni finanziarie hanno spesso timeout molto brevi di cinque o dieci minuti. Molte applicazioni hanno un tempo predefinito più tradizionale di 20 o 30 minuti. Se il flusso di lavoro della tua app richiede un lungo periodo di tempo su una pagina senza aggiornamento, potrebbe essere necessario un tempo ancora maggiore. Non so che sia estremamente importante in ogni caso, a meno che la tua applicazione non abbia esigenze di sicurezza specifiche.

9
Xander

Non sono uno sviluppatore web, quindi questo potrebbe essere sbagliato ma mi aspetto che tu possa semplicemente usare l'intestazione Set-Cookie: Nella risposta HTTP alla query AJAX per impostare la sessione biscotto.

Non è necessario passare l'ID sessione all'interno della AJAX e quindi utilizzare Javascript per impostare quel cookie. Lo standard PHP session_*() le funzioni dovrebbero gestire correttamente l'impostazione del tempo di scadenza.


In una nota di sicurezza, HTTPOnly , Sicuro e SSL. Dovresti fare tutto questo.

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

2
Ladadadada