2011-03-08 39 views
10

Estoy tratando de aumentar mi tiempo de sesión php a 6 horas.Incremente el tiempo de la sesión php

Este es el código para aumentar el tiempo de la sesión:

ini_set('session.gc_maxlifetime', 60 * 60 * 6); // 6 Hours 

Sin embargo, parece que sólo tienen un tiempo de la sesión de 1 hora.

Cualquier sugerencia es muy apreciada.

Además, ¿cómo puedo probar esta característica sin tener que esperar 6 horas para ver si mi sesión expira?

+0

se 'ini_set' permitió en su sistema? ¿Lo está llamando antes de 'session_start()'? – Czechnology

+0

¿Qué dice la entrada de 'session.gc_maxlifetime' cuando haces' phpinfo(); 'en la misma página después de' ini_set() '? – drudge

+0

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

Respuesta

-14

uso de este

ini_set('session.gc_maxlifetime', 6 * 60 * 60); // 6 Hours instead to this 
ini_set('session.gc_maxlifetime', 60 * 60 * 6); // 1 Hours 
ini_set('session.gc_maxlifetime', [hours] * [minutes] * [seconds]); 
+6

Eso simplemente no es correcto. El orden de la multiplicación no importa. – FoolishSeth

+0

esa es la peor respuesta que he visto;) – misantronic

-1

Trate siguiente-

  • Evitar espacios

ini_set ('session.gc_maxlifetime', 60 * 60 * 6);

O

  • simplemente introducir valores en segundos como ...

ini_set ('session.gc_maxlifetime', 21600);

+1

Los espacios no importan, ni tienes que multiplicar manualmente los valores. ¿Por qué esta pregunta parece estar atrayendo tales respuestas? – Leng

0

El aumento de session.gc_maxlifetime a través de ini_set puede no funcionar si hay otro script que se ejecuta (por ejemplo, otro vhost) que utiliza la misma session.save_path. La otra secuencia de comandos quita las sesiones de todos los scripts por su propia vida:

Nota:
Si diferentes scripts tienen diferentes valores de session.gc_maxlifetime pero comparten el mismo lugar para almacenar los datos de sesión a continuación, la secuencia de comandos con el valor mínimo será limpiar los datos. En este caso, use esta directiva junto con session.save_path.

Fuente: http://php.net/manual/en/session.configuration.php#ini.session.gc-maxlifetime

También asegúrese de cambiar el ajuste antes de session_start(). Si tiene session.auto_start habilitado, es demasiado tarde cuando usa ini_set.

4

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(); 
+0

Esta respuesta parece estar copiada de esta publicación de blog: http://natesilva.tumblr.com/post/250569350/php-sessions-timeout-too-soon-no-matter-how-you. ¿Eres el autor del blog o acabas de encontrarlo y copiar la información relevante? – Edward

Cuestiones relacionadas