Ver Mensaje Individual
  #20 (permalink)  
Antiguo 18/07/2010, 04:18
Avatar de AhmedRugama
AhmedRugama
 
Fecha de Ingreso: diciembre-2008
Ubicación: Nicaragua
Mensajes: 160
Antigüedad: 15 años, 4 meses
Puntos: 6
Sonrisa Respuesta: Como evitar multisesion en php y mysql

Hola, carlos_belisario te resumo el proceso:

activo y tiempo_activo son int.
/* Yo manejo mis tiempos en enteros ese es gusto de cada quien */

- Al iniciar sesión se comprueba:
que activo esté en 0 /* si el usuario cerró sesion esto esta en 0 */
o que tiempo_activo lleve mas de 6 min de la hora actual /* Esto es por si al usuario se le olvido cerrar la sesión, en este caso activo quedaría en 1 pero "tiempo_activo" dejará de actualisarse */

/* Fijate que puse "o" no "y" es decir "||" */
Tambien cambias activo a 1 si es que no lo está

- Al abrir una pagina protegida:
Normal, comprobar el nombre y pass del usuario con las variables de session
Cada una de estas paginas deben actualisar tiempo_activo cada 5 minutos con ajax


Ahora ¿ Que pasa si el usuario esta conectado y sale del navegador perdiendo los valores de la sesión pero quiere volver a entrar inmediatamente? Tendría que esperar que hallan 6 minutos de diferecia entre la hora actual y "tiempo_activo" para iniciar sesión de nuevo.
Lo que puedes hacer para evitar esta falla es crear un cookie que tenga el mismo valor que un campo "session_id" el cual preferiblemente lo llenas con un valor random y al iniciar session el if quedaria algo asi:

if( activo == 0 || tiempoactivo < (time()-6minutos) ||(cookie == session_id && tiempoactivo >(time()-6minutos))

/* La primera parte es lo que sale arriba y la segunda desde "cookie" es la solucion del problema */

El ultimo proceso sería al cerrar sesión cambiar activa = 0



Esto es lo que haría en mi humilde opinión, si a alguien se le ocurre otra solución que lo comparta