16/01/2013, 16:51
|
| Colaborador | | Fecha de Ingreso: abril-2007 Ubicación: Ni en Sevilla,ni en Sanlúcar..qué más da..
Mensajes: 927
Antigüedad: 17 años, 10 meses Puntos: 270 | |
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta. Caso 1: Si existe ya un usuario conectado, desconectar a ese usuario, y dejar entrar al nuevo usuario.
- 1) Para cada usuario, mantén el id de sesión en la base de datos.
- 2) Si al hacer login, existe un id de sesión en la base de datos, carga esa sesión , destrúyela, y crea una nueva.
(session_id($id); session_start(); session_destroy();session_start())
Si en vez de destruirla completamente (lo que provocaria que al primer usuario, directamente, le saliera la pantalla de login, ya que dejaría de estar logueado), lo que quieres es avisarle, en vez de destruir la sesión, cárgala igual, y esta vez, establece una variable $_SESSION["DESTROYED"]=true; $_SESSION["REASON"]="duplogin";
En cada carga de página, se comprueba $_SESSION["DESTROYED"].Si está a "true", se le muestra al usuario el mensaje de "Alguien ha entrado con tu cuenta desde otro navegador/ordenador".
Caso 2: si existe una sesión abierta, mantener esa, y evitar que otro entre:
- 1) Para cada usuario, manten el id de sesión en la base de datos.
- 2) Cada vez que se carga una pagina, actualiza una variable de sesión, a la fecha actual + tiempo de expiración de la sesión.
- 3) Si al hacer login, existe un id de sesion en la base de datos, carga esa sesion, comprueba que sea activa (mirando la variable de sesion creada en el paso 2), si no lo es, destruyela, y permite el login. Si, por el contrario, la sesión está activa, muestra el mensaje de error.
Caso 3) (Opcional) En cada página cargada, puedes añadir un setTimeout con javascript, al numero de segundos de expiracion de la sesion.Cuando pase ese timeout, el navegador carga una pagina de "sesion expirada", que, ademas, limpia la sesion.Asi se cierra la sesion cuando el usuario simplemente deja el navegador abierto.
Caso 4) (Opcional) En cada pagina cargada, puedes añadir un controlador del evento "onBeforeUnload", que cargue via ajax una página de cierre de sesion. |