Foros del Web » Programando para Internet » PHP »

Limitar tiempo de sesiones

Estas en el tema de Limitar tiempo de sesiones en el foro de PHP en Foros del Web. Sres. mi duda es la siguiente, puedo yo hacer un codigo o script para php que me detecte cuando el usuario tenga la sesion abierta ...
  #1 (permalink)  
Antiguo 27/11/2004, 08:04
Avatar de jmqc  
Fecha de Ingreso: noviembre-2004
Ubicación: Venezuela
Mensajes: 353
Antigüedad: 13 años
Puntos: 1
Limitar tiempo de sesiones

Sres. mi duda es la siguiente, puedo yo hacer un codigo o script para php que me detecte cuando el usuario tenga la sesion abierta que se ha quedado 5 min inactivo y sacarlo de la sesion. Esta duda me viene por que estando en la pagina de un banco de mi pais me paso eso, me saco por tiempo de inactividad y esto desperto mi curiosidad. Si alguien me pudiera ayudar en esto, se lo Agradeceria.
  #2 (permalink)  
Antiguo 27/11/2004, 13:52
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
En principio .. siempre puedes comparar el tiempo que almacenes en una sesión u otro médio de la hora que ingresastes a tu página o mejor dicho de la última actividad con tu sitio para compararlo con la próxima peticiòn (actividad) en tu sitio.

Cuando me refiero a "actividad" es a que uses un link del sitio .. un formulario (que lo envies) .. etc ..En resumen, que "pidas" una página a tu servidor.

Por ende, tienes que guardarte en algún sitio, por ejemplo en una variable de tu sesión por ejemplo .. la fecha actual que se ejecuta el script (time() por ejemplo) para poder hacer algo tipo:

if ($_SESSION['tiempo'] > time()+segundos que definas como tiempo inactivo){
// sesión superado tiempo.
}

Pero .. PHP de por sí ya otorga un tiempo máximo a una sesión. Lo define php.ini en su directiva: session.gc_maxtimelife .. así que si ajustas eso, te podrías fiar de la existencia de cualquier varaible de sesión pues .. si se expiró tu tiempo es PHP el que eliminia tu sesión (lo deja en estado de "garbage" (basura .. en espera de ser borrada físicamente).

Ahora .. si el tiempo de expiraciòn del "php.ini" es muy largo (por defecto son como 24 minutos) y no tienes opción a modificar ese tiempo o bien desesa que sea "configurable" por tu aplicación, tendrías que usar la otra opción.

A todo esto .. no sé si esa página de tu "banco" te hechó de la sesión bien cuando intentastes ejecutar un link (pedir una página) o sin hacer nada .. te salió el mensajito de que tu sesión expiró. En ese caso, la filosofía sigue siendo la misma .. PHP al ser un lenguaje del lado del servidor bajo "cliente-servidor" .. este al pedir una página la procesa y entrega su resultado en espera de la próxima petición, así que habrìa que regulamente "recargar" la página o bien otra página en un iframe o frame oculto para que pueda ir haciendo esas "peticiones" al script tuyo de proceso que valide la existencia de tus variables de sesión o tiempos en general.

Un saludo,
  #3 (permalink)  
Antiguo 27/11/2004, 20:27
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Agregando algo a lo que dijo Cluster, en php tenes una funcion para defir el tiempo que durara la var, esta es session_cache_expire(int tiempo). A su vez, si no se le pasan parametros, esta te devuelve el valor que contiene en el php.ini.
Personalmente he hecho algo como lo que mensionas del banco, y lo que hice es un js con un reloj interno igual a la cadicidad de la session. Si este reloj (cronometro) llegaba a 0, te avisaba con un confirm de js que la session se te habia vencido, y te preguntaba que seeabas hacer, si salir, o renovarla. En caso de salir hacia un simple window.location afuera del sistema, y si renovabas, hacia una llamada con xmlhttp a un php reiniciando la var de session (esto no recarga la pagina, o obviamente ponia el cronometro del js a 0). Si el usuario no soportaba el objeto xmlhttp hacia un simple redirect, o un reload (ahora no recuerdo bien).
Espero que sirva.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #4 (permalink)  
Antiguo 29/11/2004, 05:05
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
nicolaspar
La función: session_cache_expire(int tiempo) no define el tiempo que dura una sesión sino la página en caché que es bien diferente. Esto es por qué PHP con el uso de sesiones incorpora la gestión del control del caché con esa y otras funciones como session_cache_limiter() por ejemplo.

Este control del caché también lo podríamos hacer vía header() y cabeceras HTTP pero .. si ya ofrece ese grupo de funciones PHP en el uso de sesiones . mejor usarlas.

Un saludo,
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 21:09.