Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/08/2004, 08:31
Lord of Death
 
Fecha de Ingreso: abril-2004
Ubicación: Viña del Mar
Mensajes: 16
Antigüedad: 20 años
Puntos: 0
Hola, mira yo tengo un problema parecido al tuyo, pero haber si te puedo ayudar

1)
Tiempo de expiración de una sesión
Se que las directivas del php.ini que afectan al tiempo de expiración de una
sesión (por defecto) son (principalmente):
session.gc_maxlifetime = 2880 (expresado en segundos) en mi caso
session.cache_expire = 1800 (expresado en segundos) en mi caso
Aun asi las sesiones expiran rapidamente, por ejemplo si el usuario deja inactivo la pagina y despues de 3 o 5 min la sesion termina.

Yo tengo un archivo llamado seguridad.inc el cual invoco en cada pagina php que uso (include("seguridad.inc")) y en ese archivo yo invoco el session_start(), pero además incluyo una variable llamada logintime (session_register("logintime")), a la cual le asigno el valor de time(), y pregunto si ha pasado mas de 1 hora desde la ultima vez que le asigne el tiempo, el codigo es así:

if(($LoginTime+4000) < time()) {
include("$common/expirar.php");
exit;
}

expirar.php me muestra un formulario donde pide al usuario registrarse nuevamente.

2)
El segundo tema va por la restriccion de una sesion activa por usuario, es decir no deberian haber mas de 1 usuario conectado con la misma cuenta.

Con respecto al punto 2 es dificil poder bloquearle paso, a no ser que intente desde la misma maquina logearse, mira en otro mensaje de este foro me dieron una solución, lo que podrías hacer es una tabla donde guardes las conexiones del usuario (solo puede existir una sola vez en dicha tabla), mi tabla es la siguiente:

CREATE TABLE sessiones (
USUARIO___SES VARCHAR(40) NOT NULL PRIMARY KEY,
FECHA_____SES TIMESTAMP,
ID________SES VARCHAR(80));

La idea es que cada vez que el usuario se conecte verifiques su existencia en la tabla, de ser asi entonces desvialo a otra pagina, o un mensaje de aviso indicando que no puede entrar hasta el tiempo de expiración, yo hice lo siguiente:

if($reg10=lee_registro($dbses,"sessiones","usuario ___ses='$name'")){//leo el registro
$fecha1=timestamp2ibase();//asigno el tiempo real
$fecha1=ibase2time($fecha1);//convierte el tiempo en formato unix
$fecha2=ibase2time($reg10['fecha_____ses']);//convierto la ultima fecha de conexión en formato unix
$fechatot=$fecha1 - $fecha2;//hago una resta para saber la diferencia de tiempo
if($fechatot < 3600){//si el tiempo de conexión es menor a 1 hora entonces
Header("Location: error.php");
exit;
}else{
borra_registro($dbses,"sessiones","usuario___ses=' $name'");//si ha pasado mas de 1 hora entonces lo borramos de la tabla y lo dejamos pasar
}
}

Eso es lo que estoy haciendo yo ahora, de esta manera controlo que los usuarios no puedan realizar mas de 1 logeo en la plataforma.

Ojala te sirva.

Saludos!