Foros del Web » Programando para Internet » PHP »

Hacer que una sesion no caduque

Estas en el tema de Hacer que una sesion no caduque en el foro de PHP en Foros del Web. Hola me e llevado casi dos dias buscando esta informacion y no la e podido encontrar bueno si pero no como lo desee lo que ...
  #1 (permalink)  
Antiguo 05/09/2011, 17:23
Avatar de xlos_mas_pro  
Fecha de Ingreso: mayo-2011
Ubicación: Santiago
Mensajes: 359
Antigüedad: 12 años, 11 meses
Puntos: 11
Hacer que una sesion no caduque

Hola me e llevado casi dos dias buscando esta informacion y no la e podido encontrar bueno si pero no como lo desee lo que pasaa es que en mi sitio tengo un script el cual me muestra los usuarios conectados en ese minuto que hago los usuarios en la base de datos tienen un campo llamado online cuando incian sesion el campo pasa haci y cuando apretan el logut el campo vuleve a no pero que pasa cuando un usuario no apreta logout si no que cierra el navegador bueno ese es mi problema al momento de que un usuario cierra el navegador al no apretar el boton logut el campo online sigue en SI entonses lo que quiero es que como cerraron el navegador y despues abran el sitio denuevo la sesion siga activa o tambien me sirve la forma al reves que al cerrar el navegador sea como si el usuario apretara logout y aplicara un script UPDATE usuarios SET online='NO' bueno cualquiera de esas dos opciones me sirve ojala que alguien me pueda dar una solucion por que lo que me complica es que todo los usuarios me salen como onlien cuando no tienen iniciada la sesion
  #2 (permalink)  
Antiguo 05/09/2011, 22:37
Avatar de 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

Es bastante dificil trabajar con un simple "SI" o "NO", varias veces se ha comentado que lo mejor es guardar fecha y hora de la ultima actividad de cada usuario y, en base a eso, obtener el listado de quienes "estan conectados", considerando un limite de tiempo que tu quieras, por ejemplo, 15 minutos.

Que necesitas?

1- Un campo en tu tabla donde puedas almacenar fechas: DATE, TIMESTAMP, INT o el de tu preferencia
2- Cada que el usuario ingrese a una pagina de tu sitio actualizas ese campo con la fecha y hora del sistema
3- Para generar el listado, debes definir el limite maximo de inactividad para considerar que "estan conectados" y hacer tu consulta con ese filtro, ejemplo para 30 minutos: time() - 1800
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 06/09/2011, 16:24
Avatar de xlos_mas_pro  
Fecha de Ingreso: mayo-2011
Ubicación: Santiago
Mensajes: 359
Antigüedad: 12 años, 11 meses
Puntos: 11
Respuesta: Hacer que una sesion no caduque

Gracias Osea tengo que cambiar este campo online por la fecha de ingreso del usuario pero me lo podrias representar en codigo por que me han dicho que lo tengo que guardar en un cookie y cambiar la duracion de la sesion con la variable in set pero como lo hago ese es mi problema
  #4 (permalink)  
Antiguo 06/09/2011, 17:26
Avatar de 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
  #5 (permalink)  
Antiguo 07/09/2011, 03:19
Avatar de dmm84  
Fecha de Ingreso: marzo-2011
Mensajes: 164
Antigüedad: 13 años, 1 mes
Puntos: 13
Respuesta: Hacer que una sesion no caduque

encontré esto con google, prueba a ver que tal te funciona a ti:

Código PHP:
Ver original
  1. ini_set("session.gc_maxlifetime", 120000);

Segun he visto, el numero son los minutos de vida de la sesión. Lo encontré aquí: http://www.forosdelweb.com/f18/funci...ion-pq-298529/ . Si lees ese post te daras cuenta de que a lo mejor tienes que cambiar el php.ini
__________________
Mas vale un codigo que mil palabras
  #6 (permalink)  
Antiguo 07/09/2011, 10:54
Avatar de xlos_mas_pro  
Fecha de Ingreso: mayo-2011
Ubicación: Santiago
Mensajes: 359
Antigüedad: 12 años, 11 meses
Puntos: 11
Respuesta: Hacer que una sesion no caduque

Gracias pero ese codigo lo tengo que pegar en cada pagina o solo en la cual se le da el valor a la sesion por ejemplo en el sistema de login cuando se crea la sesion o en todas las paginas en la cual se esta utilizando
  #7 (permalink)  
Antiguo 08/09/2011, 09:16
Avatar de dmm84  
Fecha de Ingreso: marzo-2011
Mensajes: 164
Antigüedad: 13 años, 1 mes
Puntos: 13
Respuesta: Hacer que una sesion no caduque

eso no tengo ni idea
__________________
Mas vale un codigo que mil palabras
  #8 (permalink)  
Antiguo 05/06/2012, 02:03
Avatar de incaib  
Fecha de Ingreso: junio-2012
Ubicación: Inca
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Hacer que una sesion no caduque

EDITO: Veo que un compañero justo debajo te dijo lo mismo que yo incluso mejor explicado. Estoy atento al resultado del POST, ya que estoy gestionando una web de gestión de usuarios y el tema me interesa muchísimo.

Compañero estube pensando. ¿Si agregas ademas del estado ON/OFF un campo con date/time? así si pasan mas de 30 minutos de inactividad se ponga en OFF. Eso detectará si has cerrado el navegador mas de 30minutos. ¿Entendiste?

Última edición por incaib; 05/06/2012 a las 02:06 Razón: Por no leer ahora toca editar.
  #9 (permalink)  
Antiguo 05/06/2012, 08:47
Avatar de mft
mft
 
Fecha de Ingreso: abril-2003
Ubicación: *
Mensajes: 239
Antigüedad: 21 años
Puntos: 4
Respuesta: Hacer que una sesion no caduque

Alguien más ha podido resolver esto?? yo tambien sigo sufriendo con lo mismo. Tengo un sitio donde tienen que contestar un examen en linea. Pero aveces sucede que se tardan tanto en contestar que cuando le dan enviar, les marca error porque ya caducó y tienen q volver a entrar, etc.

Alguien ha obtenido la solución a esto???

saludos!!!
__________________
Lo que haces, determina lo que eres.
Saludos!
  #10 (permalink)  
Antiguo 05/06/2012, 08:56
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Respuesta: Hacer que una sesion no caduque

Lo que yo hago en estos casos es tener un request AJAX de fondo que se ejecute cada minuto por ejemplo, lo único que hace es refrescar la sesión para que esta no caduque, es la solución más eficiente que he visto.

Saludos.
  #11 (permalink)  
Antiguo 05/06/2012, 13:15
Avatar de incaib  
Fecha de Ingreso: junio-2012
Ubicación: Inca
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Información Respuesta: Hacer que una sesion no caduque

MFT ¿Si subes la caducidad del cookie el expire a varias horas?. Por defecto son 3600 segundo si no estoy errado.

Aquí el comando set_cookie de php

[URL]http://php.net/manual/es/function.setcookie.php[/URL]

Y lo importante el expire que es este valor
expire El tiempo en el que expira la cookie. Es una fecha Unix por tanto está en número de segundos a partir de la presente época. En otras palabras, probablemente utilizará la función [URL="http://www.php.net/manual/es/function.time.php"]time()[/URL] más el número de segundos que quiere que dure la cookie. También podría utilizar la función [URL="http://www.php.net/manual/es/function.mktime.php"]mktime()[/URL]. time()+60*60*24*30 configurará la cookie para expirar en 30 días. Si se pone 0, o se omite, la cookie expirará al final de la sesión (al cerrarse el navegador).
Si pones un expire alto al cookie no creo que les de tiempo a que se borre. ?Esto es lo que pides compañero?
  #12 (permalink)  
Antiguo 05/06/2012, 18:52
Avatar de mft
mft
 
Fecha de Ingreso: abril-2003
Ubicación: *
Mensajes: 239
Antigüedad: 21 años
Puntos: 4
Respuesta: Hacer que una sesion no caduque

gracias incaib, lo checaré y veré si logro implementarlo bien.

Gracias por tu aporte.!
__________________
Lo que haces, determina lo que eres.
Saludos!

Etiquetas: caduque, sesión
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:42.