Foros del Web » Programando para Internet » PHP »

Tiempo de una sesion

Estas en el tema de Tiempo de una sesion en el foro de PHP en Foros del Web. Hola que tal ! Mi problema es que no se donde asignar los tiempos para que una sesion se cierre despues de estar inactiva . ...
  #1 (permalink)  
Antiguo 02/03/2006, 20:27
Avatar de omarin  
Fecha de Ingreso: marzo-2006
Mensajes: 3
Antigüedad: 18 años
Puntos: 1
Tiempo de una sesion

Hola que tal !

Mi problema es que no se donde asignar los tiempos para que una sesion se cierre despues de estar inactiva.

Es decir, la sesion que cree saca a mis usuarios despues de unos minutos de inactividad y quisiera que las sesiones duraran un poco mas.

Espero me puedan ayudar.

Saludos !
  #2 (permalink)  
Antiguo 03/03/2006, 00:01
 
Fecha de Ingreso: enero-2006
Ubicación: Satiago Chile
Mensajes: 15
Antigüedad: 18 años, 2 meses
Puntos: 0
Código PHP:
<?php
//iniciamos la sesión
session_name("loginUsuario");
session_start();

//antes de hacer los cálculos, compruebo que el usuario está logueado
//utilizamos el mismo script que antes
if ($_SESSION["autentificado"] != "SI") {
    
//si no está logueado lo envío a la página de autentificación
    
header("Location: index.php");
} else {
    
//sino, calculamos el tiempo transcurrido
    
$fechaGuardada $_SESSION["ultimoAcceso"];
    
$ahora date("Y-n-j H:i:s");
    
$tiempo_transcurrido = (strtotime($ahora)-strtotime($fechaGuardada));

    
//comparamos el tiempo transcurrido
     
if($tiempo_transcurrido >= 600) {
     
//si pasaron 10 minutos o más
      
session_destroy(); // destruyo la sesión
      
header("Location: index.php"); //envío al usuario a la pag. de autenticación
      //sino, actualizo la fecha de la sesión
    
}else {
    
$_SESSION["ultimoAcceso"] = $ahora;
   }
}
?>
Espero se sea claro esto lo pudes llamar a travez de un include

ejemplo
Código PHP:
<?php include ("tiempo.php");?
__________________
Lord Nazka
Diseño - Web - Multimedia
http://www.maxnorambuena.com
Wiiii!!!! :si:
  #3 (permalink)  
Antiguo 03/03/2006, 00:24
Avatar de omarin  
Fecha de Ingreso: marzo-2006
Mensajes: 3
Antigüedad: 18 años
Puntos: 1
Gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias mil !!!!!!!!!!!

ejem, por el tiempo no habia podido seguir buscando la respuesta a esto, pero me acabas de resolver muchas dudas, solo me quedo una pequeña duda...

Si no especifico el tiempo de cierre, cual es el tiempo en el que por default se cierra la sesion?

Saludos y una vez mas, muchas gracias
  #4 (permalink)  
Antiguo 03/03/2006, 00:32
 
Fecha de Ingreso: enero-2006
Ubicación: Satiago Chile
Mensajes: 15
Antigüedad: 18 años, 2 meses
Puntos: 0
De acuerdo

jumm simpre es bueno especificar el tiempo de cierre de la secion por un asunto de seguridad ya que otro usuario puede ingrezar al pc y dejar la ****
^^ de verdad no se cuanto seria si no me ekivoco asta ke cierre la ventana del navegador .

si alguien me puede corregir.. :p

Saludos.. y suerte
__________________
Lord Nazka
Diseño - Web - Multimedia
http://www.maxnorambuena.com
Wiiii!!!! :si:
  #5 (permalink)  
Antiguo 03/03/2006, 00:37
Avatar de omarin  
Fecha de Ingreso: marzo-2006
Mensajes: 3
Antigüedad: 18 años
Puntos: 1
Muchas gracias :)
  #6 (permalink)  
Antiguo 03/03/2006, 04:45
Avatar de sir_bowen  
Fecha de Ingreso: junio-2005
Mensajes: 184
Antigüedad: 18 años, 9 meses
Puntos: 0
Hola,

yo también necesitaba algo parecido...
Mi problema es que mi aplicación tiene dos frames. Uno que hace de menú, situado a la izquierda que no hace más que abrir enlaces, y el frame principal donde se cargan las páginas que contienen el código "interesante".
El tema es que hago el include de mi tiempo.php al principio de cada fichero y si la sesión está inactiva más tiempo del permitido me redirecciona al index.php. Lo malo es que index.php me lo abre en el frame principal, quedándose el frame del menú de opciones también abierto...

¿Cómo puedo redireccionar a index.php y que se abra en _top?

Muchas gracias

Un saludo
  #7 (permalink)  
Antiguo 03/03/2006, 05:15
Avatar de sir_bowen  
Fecha de Ingreso: junio-2005
Mensajes: 184
Antigüedad: 18 años, 9 meses
Puntos: 0
Bueno, buscando buscando encontré la solución...

Al final la solución pasa por usar Javascript, con el header de PHP no se puede redireccionar a un frame concreto.

Saludos a todos, y perdón por las molestias
  #8 (permalink)  
Antiguo 03/03/2006, 05:39
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Por si acaso ..

El tiempo máximo de duración de una sesión lo define la configuración de PHP (directiva php.ini):

session.gc_maxlifetime (por defecto suele ser 1440 segundos = 24 minutos)
Se puede alterar su valor por ini_set().

Por ende .. el código propuesto por Nazka .. el control del tiempo de expiración de la sesión será determinado su valor máximo por el valor que dicha directiva de php.ini indique.

Teóricamente sólo sería necesario "jugar" con ese valor para determinar el tiempo máximo de -todas- las sesiones que crea PHP .. Por supuesto la técnica descrita por Nazka hace que ese control del tiempo máximo de vida de una sesión en curso sea controlado de forma individual.

Por mi parte y como suelen hacer otros sistemas mejorados de control de sesiones, lo que hacen es almacenar ese dato del la hora de ingreso al sistema/actualización en una BBDD .. así (entre otras cosas) puedes ver el tiempo de expiración que le queda a toda sesión iniciada en tu aplicación, "matar" selectivamente una o várias sesiones de ciertos usuarios a la vez .. etc ...

Un saludo,
  #9 (permalink)  
Antiguo 03/03/2006, 05:44
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Cita:
Iniciado por Nazka
Código PHP:
<?php
//iniciamos la sesión
session_name("loginUsuario");
session_start();

//antes de hacer los cálculos, compruebo que el usuario está logueado
//utilizamos el mismo script que antes
if ($_SESSION["autentificado"] != "SI") {
    
//si no está logueado lo envío a la página de autentificación
    
header("Location: index.php");
} else {
    
//sino, calculamos el tiempo transcurrido
    
$fechaGuardada $_SESSION["ultimoAcceso"];
    
$ahora date("Y-n-j H:i:s");
    
$tiempo_transcurrido = (strtotime($ahora)-strtotime($fechaGuardada));

    
//comparamos el tiempo transcurrido
     
if($tiempo_transcurrido >= 600) {
     
//si pasaron 10 minutos o más
      
session_destroy(); // destruyo la sesión
      
header("Location: index.php"); //envío al usuario a la pag. de autenticación
      //sino, actualizo la fecha de la sesión
    
}else {
    
$_SESSION["ultimoAcceso"] = $ahora;
   }
}
?>
Espero se sea claro esto lo pudes llamar a travez de un include

ejemplo
Código PHP:
<?php include ("tiempo.php");?
Consulta/comentario:

Para que gestionas la fecha en ese formato si al final haces una conversión de tu formato de fecha a un "unix timestamp" para operar con el (hacer una diferencia en segundos).

Simplemente tomando tu fecha/hora actual como un time() (Time Stamp, que son segundos transcurridos desde blablabla ... (era "unix")) te evita el proceso de conversión que haces con:

$ahora = date("Y-n-j H:i:s");
$tiempo_transcurrido = (strtotime($ahora)-strtotime($fechaGuardada));

Sería simplemente:

$ahora = time();
$tiempo_transcurrido = $ahora-$fechaGuardada;

Un saludo,
  #10 (permalink)  
Antiguo 03/03/2006, 11:05
 
Fecha de Ingreso: enero-2006
Ubicación: Satiago Chile
Mensajes: 15
Antigüedad: 18 años, 2 meses
Puntos: 0
Cita:
Iniciado por Cluster

Sería simplemente:

$ahora = time();
$tiempo_transcurrido = $ahora-$fechaGuardada;
buena solucion evita tanto codigo y trabajo de mas. Gracias ^^
por la correccion.
Saludos.
__________________
Lord Nazka
Diseño - Web - Multimedia
http://www.maxnorambuena.com
Wiiii!!!! :si:
  #11 (permalink)  
Antiguo 03/03/2006, 11:30
Avatar de vevni  
Fecha de Ingreso: julio-2005
Ubicación: cancun mexico
Mensajes: 598
Antigüedad: 18 años, 8 meses
Puntos: 3
eres un barbaro maestro............
tu explicacion fue coool.............
perdon este foro no es para halagar.... jejeje asi k dire algo.. "jejje"

ah sip. ese codigo esta muy bien, si, haciendo con el time, te ahorras codigo..
jejje... yap... pak no se vea feo...!!!!
__________________
Código PHP:
echo"hola mundo ver 1221332143.02";
echo
"cuantos usuarios habran impreso hola mundo en el mundo.!???"
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.
Tema Cerrado




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