Ver Mensaje Individual
  #4 (permalink)  
Antiguo 06/09/2011, 17:26
Avatar de Triby
Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Hacer que una sesion no caduque

A ver, como dijo Jack: Vamos por partes.

Una cosa es la duracion de la sesion, esa puedes controlarla con variables de sesion y/o cookies y otra muy diferente es mostrar los usuarios conectados en tu sitio, para eso serviria el campo de fecha y el proceso es simple:

Código:
// Cuando el usuario abre cualquier pagina de tu sitio:
UPDATE usuarios
    SET campo_de_fecha = fecha_del_sistema
    WHERE identificador_de_usuario = variable_de_sesion

// Despues, para obtener el listado de los usuarios conectados
// tomas en cuenta solo aquellos que han tenido actividad en
// los ultimos 30 minutos (este valor puedes cambiarlo a tu gusto)
SELECT * FROM usuarios
    WHERE campo_de_fecha > fecha_del_sistema - 30 minutos
Para mantener la sesion activa, necesitaras usar cookies, por ejemplo:

Código PHP:
Ver original
  1. // Guardas ID del usuario y un "hash" para comparar con datos de sesion
  2. $salt = '#¬~%&';
  3. $hash = md5($id . $password . $salt);
  4.  
  5. // Guardas la cookie, digamos con 30 dias de vigencia
  6. setcookie('conectado', "$id_usuario-$hash", time() + (86400 * 30));
  7.  
  8. // Cuando un usuario se conecte, logicamente primero verificas variables de sesion
  9. // Si no existe la sesion, buscas la cookie
  10. if(isset($_COOKIE['conectado'])) {
  11.     // Lees y separas el contenido, donde:
  12.     // $comparar[0] sera la id de usuario
  13.     // $comparar[1] sera el "hash" a verificar
  14.     $comparar = explode('-', $_COOKIE['conectado']);
  15.     $id = $comparar[0];
  16.     if(isset($comparar[1])) {
  17.          // Buscas en la base de datos el usuario por su ID
  18.          $dbpass = $row['password'];
  19.          // Creas el nuevo hash
  20.          $dbhash = md5($id . $dbpass . $salt);
  21.          if($comparar[1] != $dbhash) {
  22.                 // La cookie no es valida!!!
  23.                 die('Sesion caducada.');
  24.          }
  25.     }
  26. }

Esto es solo un breve ejemplo de como mantener sesiones activas por medio de cookies con un pequeño agregado de seguridad (aunque no es del todo seguro).

Solo no olvides eliminar la cookie (o guardarla con valor vacio y fecha de expiracion rapida) cuando un usuario haga click en finalizar sesion.
__________________
- León, Guanajuato
- GV-Foto