Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/05/2006, 09:07
Cluster
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 2 meses
Puntos: 129
Definiendo una variable de sesión con un tiempo en ella y luego validando ese tiempo de tu variable de sesión .. no "fijas" la duración de la sesión (en tiempo) en sí. Siempre estarás a mercer de lo que php.ini: session.gc_maxtimelife defina .. de hecho si tu bajo tu sistema de expiración de sesión defines tiempos de expiración menores al que la directiva de PHP (php.ini) que menciono tengas definido .. tu sistema "podría" funcionar .. Pero insisto que esa gestión de tiempo de expiración NO es correcta.

---------------------------------

Sobre tu código actual ...

Cita:
//defino la sesión que demuestra que el usuario está autorizado
$_SESSION["ultimoAcceso"]= date("Y-n-j H:i:s");
//defino la fecha y hora de inicio de sesión en formato aaaa-mm-dd hh:mm:ss
header ("Location: ../page/info/datatapekey.php");

// Paranoia: decimos al navegador que no "cachee" esta página.
session_cache_limiter('nocache,private');

// Asignamos variables de sesión con datos del Usuario para el uso en el
// resto de páginas autentificadas.

// definimos usuarios_id como IDentificador del usuario en nuestra BD de usuarios
$_SESSION['usuario_id']=$usuario_datos['ID'];
Esa redirección header("Location: ../page/info/datatapekey.php") ahí donde está no tiene ningún sentido si el flujo del código debe continuar como es ese caso para seguir definiendo variables de sesión. De hecho esa definición de tu variable de sesión: $_SESSION["ultimoAcceso"]= date("Y-n-j H:i:s"); no deberías hacerla antes de session_cache_limiter() sino despues (junto con las otras).


Sobre el tratamiento de fechas . .no sé para que te complicas tanto con strtotiem() cuando almacenando en tu sesión en tiempo en formato "Unix" (con time()) obtienes segundos y con ellos puedes operar fácilmente.


Cita:
if($tiempo_transcurrido >= 180) {
//si pasaron 3 minutos o más
session_destroy(); // destruyo la sesión
header("Location: info/datatapekey.php"); //envío al usuario a la pag. de autenticación
//sino, actualizo la fecha de la sesión
}else {
$_SESSION["ultimoAcceso"] = $ahora;
}
Despues de cada redireccionamiento: header("Location ...") debes terminar la ejecución del script con exit; por ejemplo .. TU código debe dejar de ejecutarse en ese punto para ejecutar el que redirecionas .. Eso es lo que en principio parece que te está dando problemas o te los puede dar ..

-------------------------------------------

Como te decía anteriormente, no comparto para nada el uso y control del tiempo de expiración de sesiones como lo haces .. NO es correcto .. dependes mucho de la configuración del servidor (php.ini directiva mencionanda antes) la cual ni "fuerzas" un valor por lo menos "alto" para poder "jugar" con el tuyo que gestionas en tu sesión .. Además este tipo de control no te dá juego para "eventualmente" "matar" una sesión o variable concreta arbitariamente.

Intenta ver otros sistemas de gestión de sesiones que incorporen control de tiempo de expiración. y luego sobre ese sistema .. desarrollas tu sistema de autentificación de usuarios (en base a "Autentitificator" si lo deseas .. es bien siemple el sistema . .pero sustituyendo el uso de sesiones "clásico" de PHP por el que defina ese otro sistema).

Por ejemplo, AdoBD tiene un módulo para gestión de sesiones bastante avanzado, almacena su información (las de las sesiones) en BBDD (contra PHP por defecto que lo hace en archivos de texto plano) .. así tienes un mayor control de la sesión .. por ejemplo "cuanto" tiempo le queda a la sesión para expirar .. "matar" una sesión cuando quieras .. etc.

AdoDB
http://phplens.com/lens/adodb/docs-session.htm


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.