Foros del Web » Programando para Internet » PHP »

PHP OO Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

Estas en el tema de Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta. en el foro de PHP en Foros del Web. Bueno, tengo un servidor de un juego online, con una pagina fabricada por una compañia en php, no dire que juego ya que podria dar ...
  #1 (permalink)  
Antiguo 16/01/2013, 12:50
Avatar de McThomass  
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Exclamación Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

Bueno, tengo un servidor de un juego online, con una pagina fabricada por una compañia en php, no dire que juego ya que podria dar ideas a los gatos que jugan este juego, esta pagina cuenta con un panel de usuarios el cual tienen que acceder para gestionar su personaje, pero pueden iniciar seccion dos veces en computador distintos y gestionarlo al mismo tiempo, obteniendo 2 veces el "beneficio", lo que necesito si alguien me podria orientar ayduar. que solamente se puedan logear una ves.

creo que lo mas util y facil a mi pensar esque una ves que se logeen, la secion anterior se cierre alguien me pueda ayudar, la web es algo compleja.

cualquier cosa que necesiten la posteo.
  #2 (permalink)  
Antiguo 16/01/2013, 12:55
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 19 años, 9 meses
Puntos: 12
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

Lo más fácil sería guardar el id de sesión en la tabla de usuarios y comprobar si se corresponde con la id de sesión php.
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge
  #3 (permalink)  
Antiguo 16/01/2013, 13:00
Avatar de McThomass  
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Exclamación Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

Cita:
Iniciado por Mahalo Ver Mensaje
Lo más fácil sería guardar el id de sesión en la tabla de usuarios y comprobar si se corresponde con la id de sesión php.
tu dices en una tabla en una db en mysql o sql?
  #4 (permalink)  
Antiguo 16/01/2013, 13:23
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

Cita:
Iniciado por McThomass Ver Mensaje
tu dices en una tabla en una db en mysql o sql?
DB = MySQL = SQL

Se refería a una tabla de madera seguramente.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 16/01/2013, 13:30
Avatar de McThomass  
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

Cita:
Iniciado por pateketrueke Ver Mensaje
DB = MySQL = SQL

Se refería a una tabla de madera seguramente.
Seguramente el usuario arriba deijo tabla, no se si en php exista una tabla temporal donde puedas guardar datos, ya que no me manejo mucho en php

saludos!
  #6 (permalink)  
Antiguo 16/01/2013, 13:38
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años
Puntos: 76
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

hola

mmmm suponiendo que tu tabla se llama usuarios, podrias crear un campo llamado conectado, que por default este en 0, que indicara que no esta conectado, apenas el usuario se loguee ya validando que los datos esten bien ,ese campo conectado pasaria a 1, entonces si el usuario intenta loguearse desde otro equipo, en el logueo validas si ese campo esta en 1 , le indicas que ya tiene una sesion abierta..

podria darte un idea
  #7 (permalink)  
Antiguo 16/01/2013, 13:39
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 19 años, 9 meses
Puntos: 12
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

Sí, me refería a una tabla de la base de datos porque necesitas saber cuál es la última sesión que estableció el usuario.
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge
  #8 (permalink)  
Antiguo 16/01/2013, 13:40
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 19 años, 9 meses
Puntos: 12
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

Me temo que la solución de informacionsys no es válida porque una sesión no siempre se cierra. Necesitas sobreescribir el id de sesión y así la última es siempre la buena.
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge
  #9 (permalink)  
Antiguo 16/01/2013, 13:44
Avatar de informacionsys  
Fecha de Ingreso: mayo-2011
Ubicación: Bogota D.C
Mensajes: 793
Antigüedad: 13 años
Puntos: 76
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

Bueno si, claro tienes razon, en mi caso lo usamos asi, y cuando pasa de que el usuario no cerro sesion, simplemente se comunica con el area de soporte para que lo desbloquee ...
  #10 (permalink)  
Antiguo 16/01/2013, 14:34
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

se puede crear un script que ejecuten los usuarios en todas las paginas donde se verifica si hay usuarios logueados desde ace mucho tiempo y si el tiempo entre la ultima vez que visito una pagina y el tiempo real es por ejemplo mayor de 2 horas lo deslogueamos automaticamente.

ahora para la parte de inicio de sesion en 2 usuarios pues si debes de crear una tabla y añadir campos como loqueado 0 o 1 un rand aleatorio en una cookie las cabeceras etcss esos datos te serviran para comprobar , ademas de muchos otros parametros que existen , ip etc......

ahora si al ahacer el logueo hacemos las comprobaciones ,si por ejemplo el campo loqueado es 1 el usuario no podra iniciar sesion y se le mostrara un mensaje donde se indique que ya se ha iniciado una sesion con esta cuenta y que si esta cuenta es tuya y no puedes acceder contacte con el area de soporte etc... (imaginate que entras en tu cuenta y ya han iniciado sesion en ella)

Última edición por webankenovi; 16/01/2013 a las 14:46
  #11 (permalink)  
Antiguo 16/01/2013, 15:58
Avatar de patilanz  
Fecha de Ingreso: enero-2012
Mensajes: 880
Antigüedad: 12 años, 3 meses
Puntos: 29
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

La solucion de informacionsys tambien puede ser valida si en cada 24 horas o menos se reestablescan los conectados, aunque no seria lo mas correcto es una alternativa.
  #12 (permalink)  
Antiguo 16/01/2013, 16:51
Avatar de dashtrash
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
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.
  #13 (permalink)  
Antiguo 16/01/2013, 16:59
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

muy buen aporte dashtrash, pero me pregunto:

siempre me hago esta pregunta y si el usuario tiene desactivado javascript??

caso3 (opcional) si el usuario tiene desactivado javascript no se cerrara la session?? , yo suguiero un metodo php + un metodo javascript , si esta activado javascript metodo javascript si no ejecutamos el metodo php.
  #14 (permalink)  
Antiguo 16/01/2013, 17:24
Avatar de dashtrash
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
Puntos: 270
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

Cita:
Iniciado por webankenovi Ver Mensaje
muy buen aporte dashtrash, pero me pregunto:

siempre me hago esta pregunta y si el usuario tiene desactivado javascript??

caso3 (opcional) si el usuario tiene desactivado javascript no se cerrara la session?? , yo suguiero un metodo php + un metodo javascript , si esta activado javascript metodo javascript si no ejecutamos el metodo php.
En mi respuesta, el uso de javascript es puramente estético, para el problema que se ha planteado.

De hecho, los casos 1 y 2 se refieren al problema de controlar dobles logins, y no usan javascript para nada.
Los casos 3 y 4 sirven para "controlar el numero de usuarios conectados actualmente al sistema".

Puedes pensar que, para eso, dejas un proceso batch que haga queries y descarte las sesiones más antiguas que un tiempo x.El asunto es que si ese es el método general, tendrás que estar haciendo queries 'update' cada x segundos.

Si usas javascript, ese proceso batch puedes hacerlo cada 3 horas, para eliminar los pocos que no tengan javascript, o que por cualquier otro motivo (apagón del ordenador), se hayan quedado colgados.
  #15 (permalink)  
Antiguo 16/01/2013, 17:29
webankenovi
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

Cita:
Iniciado por dashtrash Ver Mensaje
El asunto es que si ese es el método general, tendrás que estar haciendo queries 'update' cada x segundos.
solo me referia al caso 3 lo demas genial , a lo que cito tienes razon , por eso te dije usar php+javascript dejando en el metodo general a javascript
  #16 (permalink)  
Antiguo 16/01/2013, 17:53
Avatar de dashtrash
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
Puntos: 270
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

Cita:
Iniciado por webankenovi Ver Mensaje
solo me referia al caso 3 lo demas genial , a lo que cito tienes razon , por eso te dije usar php+javascript dejando en el metodo general a javascript
Si, pero la diferencia es que no es "si está habilitado javascript, usas javascript, y si no, php".PHP siempre tienes que usarlo (chequeo en batch de sesiones con timeout) .La ventaja de usar también javascript, es que haces que PHP tengas que usarlo "menos".

Aclarar también que, el control de usuarios conectados desde PHP (el proceso batch), significa hacer update() del campo "session_expiration_date" que se guarda en base de datos, en cada petición, claro.
Esto no supone sobrecarga en caso de que las sesiones se almacenen en base de datos, como es recomendable hacerlo.
  #17 (permalink)  
Antiguo 17/01/2013, 17:58
Avatar de McThomass  
Fecha de Ingreso: enero-2009
Mensajes: 10
Antigüedad: 15 años, 3 meses
Puntos: 0
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

disculpen que suene algo flojo, pero si alguien me pudiera ayudar mas en el codigo con lo que hacer, porque en realidad no se mucho php, de verdad el que me ayude estara solucionando un error a una gran cantidad de personas que todos tiene el mismo problema pero nadie la ha descubierto.
  #18 (permalink)  
Antiguo 22/01/2013, 13:00
Avatar de Mahalo  
Fecha de Ingreso: julio-2004
Ubicación: Mallorca (Illes Balears)
Mensajes: 1.121
Antigüedad: 19 años, 9 meses
Puntos: 12
Respuesta: Evitar usuario inicie secion en 2 equipos distintos, con la misma cuenta.

Es que el tema incluye manejo de sesiones y consultas a la base de datos. Si por ejemplo lees un libro de php estos son capítulos fundamentales. Haz pruebas con sesiones y pruebas con mysql. Las dudas que te surjan las preguntas aquí que seguro que alguien te ayuda. Pero no me parece bien que te lo hagan todo.
Saludos!
__________________
Los ignorantes se empeñan en enseñar. Los sabios en aprender.
SourceForge

Etiquetas: usuarios
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 04:03.