2010-10-05 11 views
9

He estado sacando mi cabello tratando de descubrir por qué mis sesiones se terminan/matan/destruyen a los 30 minutos. Bueno, parece que los sistemas basados ​​en Debian tienen una ejecución cron especial que ignora todas las configuraciones de php.ini y apache y elimina cualquier sesión inactiva en 30 minutos.Sistemas basados ​​en Debian Sesión eliminada a los 30 minutos en cron especial, ¿cómo sobrescribir?

El camino cron: /etc/cron.d/php5

Dentro del cron:

# /etc/cron.d/php5: crontab fragment for php5 
# This purges session files older than X, where X is defined in seconds 
# as the largest value of session.gc_maxlifetime from all your php.ini 
# files, or 24 minutes if not defined. See /usr/lib/php5/maxlifetime 

# Look for and purge old sessions every 30 minutes 
09,39 *  * * *  root [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm 

no estoy mal en la configuración y la configuración de los hosts, pero no soy un administrador de sistemas. ¿Podría alguien ayudarme a anular/editar/cambiar/reconfigurar esto para que pueda establecer el valor más? Creo que 3 horas sería bueno, pero me gustaría entender los cambios así que si alguien más arriba quiere hacer que el tiempo de la sesión sea más corto/más largo, confío en cómo configurar el cambio.

Gracias a ninguna ayuda penetración en este

EDIT: Adición de código /usr/lib/php5/maxlifetime

#!/bin/sh -e 

max=1440 

for ini in /etc/php5/*/php.ini; do 
     cur=$(sed -n -e 's/^[[:space:]]*session.gc_maxlifetime[[:space:]]*=[[:space:]]*\([0-9]\+\).*$/\1/p' $ini 2>/dev/null || true); 
     [ -z "$cur" ] && cur=0 
     [ "$cur" -gt "$max" ] && max=$cur 
done 

echo $(($max/60)) 

exit 0 

por lo que parece ser la búsqueda de todos los archivos php.ini, se encuentra la el mayor valor, lo compara con 1440 (que es 24 minutos).

Éstos son los archivos php.ini

/etc/php5/apache2/php.ini 
session.gc_maxlifetime = 1440 

/etc/php5/cgi/php.ini 
session.gc_maxlifetime = 1440 

/etc/php5/cli/php.ini 
session.gc_maxlifetime = 1440 

pero ¿por qué mi sesión de escritura de los matan a los 30 minutos y no 24 minutos?

EDIT # 2: CRON que se ejecuta cada 30 minutos es por lo que parece que la sesión se mata a intervalos de 30 minutos. Pero también podría ser de 24 a 54 minutos, FYI

también mirando hacia el código en: /usr/lib/php5/maxlifetime que está tomando el valor más alto y durante mi prueba de que estaba tratando de bajar el umbral para acelerar la condición.

Parece que solo necesito aumentar uno en los archivos php.ini a más de una prueba de prueba de una hora.

Respuesta

8

Editar el archivo /usr/lib/php5/maxlifetime

El valor debe ser en cuestión de segundos. Este archivo también revisará tu php.ini, así que no sé por qué no estaba funcionando para ti.

+0

Eso es lo que pensé también, pero ese archivo busca los archivos php.ini (todos) y encuentra el mayor valor en el segundo (que es 1440 o 24 minutos). Pero mi sesión no excede el tiempo de espera hasta 30 minutos y no puedo entender por qué –

+4

El trabajo cron solo se ejecuta cada 30 minutos, por lo que su sesión puede ser válida de 24 a 54 minutos. –

+0

mierda, acaba de tener un momento DUH. Gracias. Creo que esto me ayudará a establecer una sesión más larga. –

3

Esta es una pregunta para serverfault.com.

Sin embargo, cambie session.gc_maxlifetime en /etc/php5/apache2/php.ini o - si no tiene un apache2 - uno de los otros archivos /etc/php5/*/php.ini. El script /usr/lib/php5/maxlifetime usará el máximo para esa configuración encontrada en cualquiera de esos archivos.

La edición maxlifetime no ayudará o al menos solo hasta que el paquete php5-common se actualice nuevamente.

+0

comprensible sobre serverfault.com pero también creo que esto es relevante porque he configurado el php.archivo ini, así como tratar de establecer el valor dentro de php y aún mata la sesión en 30 minutos, incluso cuando todo está configurado a 1440 segundos o 24 minutos –

0

Está justo allí en su fragmento de tarea programada php5:

Buscar y purgar viejos sesiones cada 30 minutos

No importa el guión purga 24 minutos sesiones de edad, si no se ejecuta la secuencia de comandos más de cada 30 minutos :)

1

puede proporcionar su propia ruta de la sesión session.save_pathO utiliza un controlador diferente por completo session.save_handler

Sin embargo, deberá proporcionar el mecanismo adecuado para administrar los archivos de sesión no deseados.

encontrado esto en mi php.ini

; NOTE: If you are using the subdirectory option for storing session files 
;  (see session.save_path above), then garbage collection does *not* 
;  happen automatically. You will need to do your own garbage 
;  collection through a shell script, cron entry, or some other method. 
;  For example, the following script would is the equivalent of 
;  setting session.gc_maxlifetime to 1440 (1440 seconds = 24 minutes): 
;   cd /path/to/sessions; find -cmin +24 | xargs rm

poco me encontré con este problema en los archivos de sesión no deseados se acumulan porque estaba usando PHP y mod_fcgid con una costumbre session.save_path para cada host virtual.

0

Si usted vino aquí porque el cron es tirar errores cada 30 minutos (a 09 y 39) que puede tener errores similares en el syslog y/o buzón de correo:

[ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -type f -cmin +$(/usr/lib/php5/maxlifetime) -print0 | xargs -n 200 -r -0 rm 
PHP Fatal error: Directive 'allow_call_time_pass_reference' is no longer available in PHP in Unknown on line 0 

La razón de esto tal vez que usted upgraded your Debian to Wheezy y tiene entradas antiguas en su /etc/php5/apache2/php.ini.

Tuve que comentar las siguientes líneas y los errores desaparecieron.

  • allow_call_time_pass_reference
  • register_long_arrays

escritura Im esto porque este es uno de los mejores resultados de Google si la búsqueda de los mensajes de errores y puede afectar a muchos usuarios/administradores que mantienen emabrgo debian instalaciones para más de una versión.

PD: Esto me ayudó mucho: http://vernontbludgeon.com/blog/archives/2013/10/debian-php-session-garbage-collection-maxlifetime-fails-when-php.ini-has-obsolete-directives.html

0

uso por debajo de cron para borrar sesiones no utilizadas.

39 20 * * * raíz [-x/usr/lib/php5/maxlifetime] & & [-d/var/lib/php5] & & find/var/lib/php5/-depth -mindepth 1 - maxdepth 1-type f -cmin + $ (/ usr/lib/php5/maxlifetime) -print0 | xargs -r -0 rm

Cuestiones relacionadas