El escenario
Usted está ejecutando Debian Linux o Ubuntu Linux. Desea que las sesiones de PHP duren más que los 1440 segundos predeterminados (24 minutos).Por lo que hace esto:
ini_set('session.gc_maxlifetime', 10800); # 3 hours
Con este ajuste, las sesiones debe permanecer activo durante al menos tres horas, siempre y cuando los usuarios no cierran su browser.1
Pero no importa lo que haces, sesiones sigue siendo eliminado después de 24-54 minutos. Parece que PHP está ignorando la configuración de gc_maxlifetime.
¿Por qué sucede esto
Debian y Ubuntu Linux anulación comportamiento de la sesión de PHP. Si miras detenidamente, verás que session.gc_probability se establece en 0, lo que significa que la recolección de basura de PHP nunca se ejecutará. En cambio, hay un trabajo cron específico de Debian en /etc/cron.d/php5 que se ejecuta cada 30 minutos.
El trabajo cron realiza la recolección de elementos no utilizados según la sesión global.gc_maxlifetime en php.ini. La session.gc_maxlifetime en su aplicación se ignora.
La solución
Mientras que usted podría deshabilitar el trabajo de cron y/o modificar php.ini, preferiría para solucionar el problema sin modificar valores predeterminados del sistema. Una mejor solución es crear su propio directorio de sesiones, en algún lugar fuera de lo normal, y luego habilitar localmente la recolección de basura de la sesión de PHP.
Para hacer esto, set session.gc_maxlifetime, session.gc_probability, session.gc_divisor, and session.save_path
:
# Session lifetime of 3 hours
ini_set('session.gc_maxlifetime', 10800);
# Enable session garbage collection with a 1% chance of
# running on each session_start()
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 100);
# Our own session save path; it must be outside the
# default system save path so Debian's cron job doesn't
# try to clean it up. The web server daemon must have
# read/write permissions to this directory.
session_save_path(APP_PARENT_DIR . '/sessions');
# Start the session
session_start();
se 'ini_set' permitió en su sistema? ¿Lo está llamando antes de 'session_start()'? – Czechnology
¿Qué dice la entrada de 'session.gc_maxlifetime' cuando haces' phpinfo(); 'en la misma página después de' ini_set() '? – drudge
Quiero crear el tiempo de espera de la sesión en 6 horas, pero mi navegador se agota en 1/2 hora. Estoy en un servidor PLESK. I .htaccess actualizado para tener las configuraciones: php_value session.gc_maxlifetime 21600 php_value session.cache_expire 21600 php_value session.cookie_lifetime 21600 Aquí es el PHPinfo relevante: session.gc_maxlifetime \t locales = 21600 \t maestro = 1440 session.cache_expire \t local = 21600 \t master = 180 session.gc_maxlifetime \t local = 21600 \t master = 1440 – Ken