Foros del Web » Programando para Internet » PHP »

Vigencia optima de mis sesiones

Estas en el tema de Vigencia optima de mis sesiones en el foro de PHP en Foros del Web. Hola a todos. Tengo un site que funciona como una herramienta de trabajo para usuarios de compañías de seguros. Es decir, es usual que varios ...
  #1 (permalink)  
Antiguo 28/10/2005, 11:00
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 16 años
Puntos: 38
Pregunta Vigencia optima de mis sesiones

Hola a todos.

Tengo un site que funciona como una herramienta de trabajo para usuarios de compañías de seguros. Es decir, es usual que varios de ellos deban permanecer activos en el site por varias horas al día aunque esto no implique que el uso sea continuo.

Tengo la vigencia de mis sesiones puestas a 2 horas (gc_maxlifetime) y propago mi SID de página a página para no depender de cookies.

Tengo varias preguntas:

- ¿Ese tiempo de vigencia comienza a contar al momento de creada la sesión o desde la última actividad registrada?

- Si pongo un valor muy alto del gc_maxlifetime ¿En que me podría perjudicar?

- ¿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?

Saludos.
  #2 (permalink)  
Antiguo 28/10/2005, 11:36
 
Fecha de Ingreso: enero-2004
Mensajes: 6
Antigüedad: 13 años, 11 meses
Puntos: 0
Saludos, Kaopectate.

- El tiempo de vigencia cuenta a partir de la última actividad de la página (último clic). O al menos eso tengo entendido.
- No es recomendable un valor alto del gc_maxlifetime, ya que las variables permanecen en la memoria del servidor aunque se haya cerrado la página, consumiendo recursos de forma inútil, y ralentizando por tanto los accesos a memoria y la velocidad de proceso.
- Para que no caiga la sesión puedes poner un paqueño código JavaScript que recargue la página cada cierto tiempo. De este modo las variables se recargan al actualizarse la página, lo cual debe ser antes de que se cumpla el session.gc_maxlifetime. Podría ser algo como:

window.setTimeout("document.formulario.submit();", milisegs);

Saludos.
  #3 (permalink)  
Antiguo 28/10/2005, 13:56
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 16 años
Puntos: 38
Hola Boolean.

Gracias por tu respuesta, me ayuda mucho.

Mientras esperaba por la respuesta de alguien me puse a pensar en como podría estar programado eso aqui en vBulletin, ya que me imagino que si yo deshabilito las cookies él debería garantizar la propagación de la SID usando uno de los métodos alternativos.

¿Será que si yo dejo la página abierta sin actividad por un par de horas y no uso cookies, me voy a tener que identificar de nuevo?

O quizás la información de estado que guarda un sitio como este re reduzca al id de usuario y sea mas facil de manejar que en mi caso.

Saludos.
  #4 (permalink)  
Antiguo 28/10/2005, 15:24
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 16 años
Puntos: 38
Pues acabo de descubrir un hilo muy cercano a este que plantea un dilema similar, y tampoco hay una respuesta muy conclusiva, aunque las apreciaciones de Cluster concuerdan con las de Boolean, y con el comportamiento que yo percibo en mi site.

Me gustaría ver si alguien mas tiene algo que aportar ya que las pruebas que he hecho no son muy precisas (creo que porque la sesión es borrada por un evento "probabilistico").

Me veo tentado a usar un gc_maxlifetime de 0, ya que mis usuarios son restringidos (nunca tengo mas de 40 usuarios distintos al dia y lo mas que puedo tener en un momento dado son cinco o seis.

Ojalá alguien mas me ayude a ver este asunto con claridad.

Saludos.
  #5 (permalink)  
Antiguo 31/10/2005, 05:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
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,
  #6 (permalink)  
Antiguo 31/10/2005, 09:00
Avatar de Kaopectate
Colaborador
 
Fecha de Ingreso: diciembre-2001
Ubicación: Curaçao (Antillas Holandesas)
Mensajes: 3.179
Antigüedad: 16 años
Puntos: 38
Uffff!!!!!

Creo que cada pregunta que he hecho en este foro la cierro de la misma manera.

¡Gracias Cluster por tu paciencia y por la profundidad de tu respuesta!

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:28.