Posterior a de esta prolongada recopilación de información pudimos solucionar esta duda que presentan muchos usuarios. Te dejamos la solución y nuestro objetivo es servirte de mucha ayuda.
Solución:
En app/config/session.php
tú tienes:
lifetime
opción que le permite configurar tiempo de caducidad de la sesión en minutos (no en segundos)
'lifetime' => 60,
significa que la sesión caducará después de una hora.
También hay una configuración más aquí:
'expire_on_close' => true,
que decide si la sesión expirará cuando se cierre el navegador.
Otras configuraciones en las que podría estar interesado también son php.ini
valores de:
session.cookie_lifetime = 0
y
session.gc_maxlifetime = 1440
Esos son valores predeterminados.
El primero significa cuánto tiempo se almacenará la cookie de sesión: el valor predeterminado es 0 (hasta que se cierre el navegador). La segunda opción significa después de cuántos de segundos PHP puede destruir los datos de esta sesión.
Dije que puede porque hay otra opción. session.gc_probability
en php.ini
archivo que decide cuál es la posibilidad de ejecutar el recolector de basura. Por defecto, solo hay un 1% de probabilidad de que después de 1440 segundos (24 minutos) los datos de esta sesión se destruyan.
Revisar su php.initiene un valor de sesión.gc_maxlifetime (y también sesión.cookie_lifetime) que establece un límite sobre el tiempo que PHP permitirá que duren las sesiones. Cuando Laravel establece las opciones, pasa cookie_lifetime
como el valor establecido en app/config/session.php
.
Sin embargo, las sesiones no caducan inmediatamente después de alcanzar la vida útil máxima. Lo que sucede es que después de que haya pasado esa cantidad de tiempo, la sesión está disponible para que el recolector de elementos no utilizados la elimine.
Para resolver el problema
Una solución es verificar su php.ini
expediente. Puede tener esta variable definida: session.gc_maxlifetime
. Por defecto está configurado en 1440. solo comentalo o borralo.
A partir de este momento, su sesión puede funcionar correctamente utilizando los valores de configuración de session.php.
El soporte nativo de sesión de PHP se eliminó a partir de Laravel 4.1
Para configurar la edición de duración de la sesión app/config/session.php
y establece lo siguiente:
/* 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,
Referencias:
- Discusión de por qué se eliminaron las sesiones nativas de PHP. (porque automáticamente agrega información de cookies a los encabezados, lo que requiere mucho trabajo para que los marcos se muevan si quieren envolver completamente la solicitud/respuesta)
- Otros controladores de sesión de Laravel
- Adición de la opción de configuración expire_on_close discutida en la guía de actualización de Laravel 4.0 a 4.1
Correr artisan changes 4.1.*
en la línea de comando para ver la nota sobre el native
controlador de sesión es equivalente 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.
Si entiendes que ha resultado provechoso este post, sería de mucha ayuda si lo compartieras con otros entusiastas de la programación de esta forma contrubuyes a extender esta información.