Ver Mensaje Individual
  #5 (permalink)  
Antiguo 31/10/2005, 05:49
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Hola Kao, (bienvenido por estos "lares" xD).

Cita:
- ¿Ese tiempo de vigencia comienza a contar al momento de creada la sesión o desde la última actividad registrada?
En principio .. al propagar el SID en el URL (no en cookies), tu tiempo de expiración de tu sesión depende directamente y exclusivamente del tiempo que define: session.gc_maxlifetime

Según php.net .. cuando entra en vigencia el "cronometro" de una sesión no queda muy claro, .. por "experiencia" veo que cuando estás en el tiempo de la sesión definido y pides otra página de tu sitio (script donde uses sesiones: session_start()) el tiempo se reinicia, pues, .. no me "saca" del sistema mis validaciones de sesiones clásicas.

La referencia de php.net al respecto se refiere al proceso de "garbage" o "recolector de basura" .. es decir, al terminar su tiempo de expiración el archivo en sí (asumiendo que usamos el sistema de sesiones por defecto de PHP que genera archivos de texto plano en el servidor con nuestras variables de sesión) no es borrado al instante sino determinado por un porcentaje de ejecuciones de "session_start()" y con algunos detalles según S.O. del servidor y sistema de archivos:

Cita:
Note: If you are using the default file-based session handler, your filesystem must keep track of access times (atime). Windows FAT does not so you will have to come up with another way to handle garbage collecting your session if you are stuck with a FAT filesystem or any other filesystem where atime tracking is not available. Since PHP 4.2.3 it has used mtime (modified date) instead of atime. So, you won't have problems with filesystems where atime tracking is not available.
Cita:
- Si pongo un valor muy alto del gc_maxlifetime ¿En que me podría perjudicar?
En principio no debería pasar nada (con respecto a seguridad) .. más aun que estás en un ambiente cerrado (una "intranet"?). Con respecto a recursos de tu servidor .. mantener N sesiones activas es un proceso extra .. pero en tu caso son realmente pocas ..

Cita:
- ¿Que suele hacer la gente para evitar la vergonzosa caida del site cuando caduca la sesión? ¿Dejan que eso pase y que los usuarios se vuelvan a identificar? ¿Programan cada página con JS para que avise al usuario poco antes de la expiración de la sesión?
En ese caso .. si deseas tener un mejor control de tu tiempo de expiración de tus sesiones, lo mejor es -no usar- el sistema de sesiones de PHP por defecto (por lo menos para la gestión del tiempo de expiración sobre el cual no se tiene ningún control individual sino en conjunto para toda sesión creada en el servidor).

Existen otras implementaciones y/o mejoras al sistema de sesiones de PHP. De hecho "PHP" dejó la "puerta abierta" para este tipo de desarrollos al crear esta función:

session_set_save_handler()
http://www.php.net/manual/en/functio...ve-handler.php

Fijate en las propuestas de los usuarios (en los comentarios de los usuarios al pié de la documentación de PHP oficial) ..Se basan en la "re-escritura o redirección" de ciertas funciones de sesiones hacia las tuyas própias; veras muchos que usan Base de datos para un mejor control de la sesión, incluido un mejor control para el tiempo de expiración de tus sesiones e incluso para poder saber (previa consulta a esa BD que gestiona dicha información) cuanto te queda de una sesión .. Con ese dato ya puedes ir jugando con técnicas como "Ajax" por ejemplo para ofrecera alguna especie de "contador" en tiempo real de lo que te queda de una sesión, o lanzar algún aviso ante la inminente cierre de la sesión .. o incluso alargar ese tiempo de expiración para un caso concreto según el contexto de tu aplicación (ejemplo: cierto formulario de ingreso de datos que esté activo).

Tienes más sistemas de gestión de sesiones alternativos o complementarios al de PHP oficial en sitios como www.phpclasses.org

De todas formas, revisa la documentación de PHP al respecto (sesiones) pero en ingles .. está algo más completa (sobre todo fijate en la sección: "Sessions and security" y en ese "External links" que es un documento sobre seguridad en sesiones.

Un saludo,