2014-09-27 13 views
17

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

20

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.

5

App\Config\Session.php

assegno per tutta la vita ...

è anche possibile impostare ...

Cookie::make('name', 'value', 60); // 1 hr 
34

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.

+2

la prima parte di questo (lifetime e expire_on_close) è corretto; il resto no. –

8

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:

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. 
Problemi correlati