Esiste un modo intrinseco per impostare le sessioni in scadenza dopo un certo periodo di tempo. La mia configurazione attuale sembra scadere dopo 30 minuti e vorrei disabilitarlo o almeno aumentarlo, ma non riesco a trovare nessun posto in Laravel dove questo potrebbe essere impostato?Come impostare il timeout della sessione in Laravel 4.2?
risposta
Controlla la tua php.ini, ha un valore per session.gc_maxlifetime (e anche session.cookie_lifetime) che stabilisce un limite per quanto tempo PHP consentirà alle sessioni di durare. Quando Laravel imposta le opzioni, passa a cookie_lifetime
come valore impostato in app/config/session.php
.
Tuttavia, le sessioni non sono scadute immediatamente dopo il raggiungimento della durata massima. Quello che succede è dopo che è trascorso il tempo che la sessione è disponibile per essere rimossa dal garbage collector.
per risolvere il problema
Una soluzione è quella di controllare il vostro file di php.ini
. Si può avere questa variabile definita: session.gc_maxlifetime
. Per impostazione predefinita è impostato su 1440. Basta commentare o eliminarlo.
Da questo momento in poi la sessione potrebbe funzionare correttamente utilizzando i valori di configurazione di session.php.
App\Config\Session.php
assegno per tutta la vita ...
è anche possibile impostare ...
Cookie::make('name', 'value', 60); // 1 hr
In app/config/session.php
avete:
lifetime
opzione che consentono di impostare sessione scade il tempo in minuti (non in secondi)
'lifetime' => 60,
significa che la sessione scade dopo un ora.
C'è anche un ambiente più qui:
'expire_on_close' => true,
che decide se sessione sarà scaduto quando il browser verrà chiuso.
Altre impostazioni si potrebbe ottenere interessati è anche php.ini
valori:
session.cookie_lifetime = 0
e
session.gc_maxlifetime = 1440
Questi sono i valori di default.
Il primo indica la durata di memorizzazione del cookie di sessione: il valore predefinito è 0 (fino alla chiusura di browse). La seconda opzione indica dopo quanti di secondi PHP possono distruggere i dati di questa sessione.
Ho detto che c'è un'altra opzione session.gc_probability
nel file php.ini
che decide qual è la possibilità di eseguire Garbage Collector. Essere di default c'è solo l'1% di possibilità che dopo 1440 secondi (24 minuti) questi dati di sessione vengano distrutti.
supporto nativo sessione di PHP è stata abbandonata a partire dal laravel 4.1
Per configurare della durata della sessione di modifica app/config/session.php
e impostare la seguente:
/* if this is set to 'native' it will use file.
if this is set to 'array' sessions will not persist across requests
effectively expiring them immediately.
*/
'driver' => 'file'
/* number of minutes after which the session is available for Laravel's
built in garbage collection.
Prior to 4.1 you could set this to zero to expire sessions when
the browser closes. See the next option below.
*/
'lifetime' => 60
/* If true sessions will expire when the user closes the browser.
This effectively ignores your lifetime setting above.
Set to false if you want Laravel to respect the lifetime value.
If your config file was written before 4.1 you need to add this.
*/
'expire_on_close' => false,
Riferimenti:
- Discussion of why native PHP sessions were dropped. (Perché aggiunge automaticamente le informazioni dei cookie per le intestazioni che richiede un sacco di lavoro per quadri di andare in giro se vogliono avvolgere completamente la richiesta/risposta)
- Other Laravel session drivers
- Addition of expire_on_close config option discusso in laravel 4.0 a guida 4.1 aggiornamento
Run artisan changes 4.1.*
nella riga di comando per vedere la nota circa il native
conducente sessione equivalenti a file
$ artisan changes 4.1.* | grep -i native
-> Native session driver has been replaced by 'file'. Specifying 'native' driver will just use the new file driver.
la prima parte di questo (lifetime e expire_on_close) è corretto; il resto no. –