pasé algún tiempo en busca de una buena respuesta a la forma en la configuración del servidor de php.ini hacen sesiones expiran. Encontré mucha información, pero me tomó un tiempo averiguar por qué la configuración funciona de la manera en que lo hacen. Si eres como yo, esto podría ser útil para ti:
Las sesiones se almacenan como cookies (archivos en la PC del cliente) o del lado del servidor como archivos en el servidor. Ambos métodos tienen ventajas y desventajas.
Para las sesiones almacenadas en el servidor, se utilizan tres variables.
session.gc_probability session.gc_divisor session.gc_maxlifetime
(session.gc_probability/session.gc_divisor) produce la probabilidad de que la rutina de colección basura se ejecutará. Cuando se ejecuta el recolector de elementos no utilizados, comprueba los archivos de sesión a los que no se ha accedido durante al menos session.gc_maxlifetime y los elimina.
Todo esto es explicado bastante bien en mensajes en el foro (sobre todo éste!) - Pero los siguientes preguntas vienen arriba:
1.) ¿Cómo se aplica esa probabilidad? ¿Cuándo tira el servidor los dados?
A: El servidor lanza los dados cada vez que se invoca session_start() durante cualquier sesión activa en el servidor. Así que esto significa que usted debe ver la basura plazo colector aproximadamente una vez por cada 100 veces que session_start() se llama si tiene el defecto de session.gc_probability = 1 y session.gc_divisor = 100
2.) ¿Qué ocurre en servidores de bajo volumen?
A: Cuando se llama a session_start(), FIRST actualiza la sesión y pone a su disposición los valores de sesión . Esto actualiza la hora en su archivo de sesión en el servidor . ENTONCES tira los dados y si gana (1 de cada 100 posibilidades) llama al recolector de basura. El recolector de elementos no utilizados luego verifica todos los archivos de id. De sesión y ve si hay cualquiera que sea elegible para eliminación.
Esto significa que si usted es la única persona en el servidor, su sesión nunca pasará a estar inactiva y parecerá que cambiar la configuración no tiene efecto . Supongamos que cambia session.gc_maxlifetime a 10 y session.gc_probability a 100. Esto significa que hay un 100% de posibilidades de que el recolector de elementos no utilizados se ejecute y eliminará los archivos de sesión a los que no se haya accedido en los últimos 10 segundos .
Si usted es el único en el servidor, su sesión no será eliminada. Necesita al menos 1 sesión activa más para que la suya quede inactiva.
Así que, básicamente, en un servidor de bajo volumen o en un momento bajo volumen - Podría ser mucho más largo que session.gc_maxlifetime antes de que el recolector de basura funciona realmente y las sesiones se elimina realmente. Y sin saber cómo funciona esto, puede aparecer completamente al azar para usted.
3.) ¿Por qué usan la probabilidad?
A: Rendimiento. En un servidor de mayor volumen, no desea que el recolector de elementos no utilizados se ejecute en cada solicitud de session_start(). Se ralentizará el servidor innecesariamente. Por lo tanto, dependiendo del volumen de su servidor, es posible que desee aumentar o disminuir la probabilidad de que se ejecute el recolector de elementos no utilizados.
Espero que esto una las cosas para usted. Si eres como yo y probaste la sesión .gc_maxlifetime y parece que no funcionó (porque lo intentó en un servidor de desarrollo para no molestar a nadie), entonces esta publicación con suerte le guardó algunos arañazos en la cabeza.
¡Buena suerte!
Como me topé con esta pregunta a mí mismo después de algunas investigaciones, uno puede tener una respuesta muy a fondo sobre ese problema en [esta pregunta StackOverflow] (http://stackoverflow.com/a/1270960/474526), especialmente por qué ninguna actualización de 'session.gc_maxlifetime' ni 'session.cookie_lifetime' son enfoques confiables. –