Foros del Web » Programando para Internet » PHP »

Problema con Session

Estas en el tema de Problema con Session en el foro de PHP en Foros del Web. Hola, quisiera saber como hacer para que el usuario que se logea lo pueda hacer una sola vez y no varias veces a al mismo ...
  #1 (permalink)  
Antiguo 08/04/2008, 17:38
(Desactivado)
 
Fecha de Ingreso: enero-2008
Ubicación: Mendoza
Mensajes: 458
Antigüedad: 16 años, 3 meses
Puntos: 2
Pregunta Problema con Session

Hola, quisiera saber como hacer para que el usuario que se logea lo pueda hacer una sola vez y no varias veces a al mismo tiempo...

No quiero que mis usuarios se logeen mas de una vez al mismo tiempo..

Como lo hago...

No posteo mis scripts de autentificacion por que son bastante largos... lo que si uso variables de sesion...

Por ejemplo:

session_name($usuarios_sesion);
// incia sessiones
session_start();
// Paranoia: decimos al navegador que no "cachee" esta página.
session_cache_limiter('nocache,private');
// Asignamos variables de sesión con datos del Usuario para el uso en el
// resto de páginas autentificadas.
$_SESSION['usuario_id']=$usuario_datos['id'];

esa seria cuando crea la sesion..

Como hago para que solo lo pueda hacer una vez y no varias al mismo tiempo... gracias....
  #2 (permalink)  
Antiguo 08/04/2008, 20:26
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: Problema con Session

Hola cmarrero,

Cuando el usuario se loguea debes usal alguna tabla de control que se llame por ejemplo `controlin`.

En ese caso cuando el usuario se loguea correctamente ingresas en esa tabla el nombre de usuario, IP desde donde se conecta y el id de sesion.

Suponte que el usuario se conecta en la maquina A, ingresaste en esa table ese IP de internet, mas el id de sesion y el nombre de usuario.

Desde ahi siempre controlas que el IP, la sesion sean el mismo que el usuario.
En el caso donde el usuario no coincide con el IP y el ID de sesion de esa tabla (controlin), lo desconectas.

por qué?
Cuando el mismo usuario se conecte desde la máquina B entonces los datos en la tabla de control serán actualizados y desde ese momento en la maquina A quedará desconectado.

Algo parecido sucede con el msn.

Espero haber sido claro con la idea ahora solo tienes que implementarla.
SAludos

Última edición por usermax; 08/04/2008 a las 21:56
  #3 (permalink)  
Antiguo 08/04/2008, 21:51
 
Fecha de Ingreso: septiembre-2006
Ubicación: Buenos Aires
Mensajes: 125
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Problema con Session

Yo tengo un sistema de usuarios y no tome racaudos en el caso que el mismo usuario se conecte desde 2 maquinas distintas al mismo tiempo.Porque supuse que como el solo tiene su contraseña no va a jugar a conectarse doblemente.
Pero estaba pensando en implementar algo para evitarlo.

Se me ocurre hacer como dice usermax un tabla donde tambien pondría la hora y dia que se conecta y si el usuario cierra la session tambien actualizar esta tabla poniendo que la session esta activa o no.

Ahora como se resolveria el caso que el usuario no cerró session y se quiere conectar de otra maquina?
Como cierro la primer session? hay alguna forma de terminarla sabiendo el numero de session? (es decir cuando el usuario se conecta desde la maquina B terminar la session de la maquina A por su numero de ID)

Porque la otra forma seria actualizar la BD poner que se termino la session de la maquina A ;pero en realidad no la pude destruir si no tendría que estar controlando en cada pagina que el usuario navega en la base de datos si la session esta activa o no.

En definitiva quiero saber si desde la maquina B se puede terminar con la session de la maquina A.Para no implentar el sistema que este controlando todo el tiempo si la session esta activa en la BD.
__________________
alquiler gesell
  #4 (permalink)  
Antiguo 08/04/2008, 22:02
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: Problema con Session

Hola acknowledge:

No es necesario tantas complicaciones. Mira:

Se pueden dar varios casos:

Caso 1: El usuario dejó el explorador abierto y se fue sin cerrar la ventana.
Luego se fue a otra máquina y entro nuevamente. En ese momento, cuando entró en la maquina B se actualiza el IP el ID de sesion para ese usuario en la tabla de control.
Supongamos que el usuariuo vuelve a la maquina A que dejo prendida, cuando intente navegar el sistema, compara si para ese usuariuo el IP y el ID de sesion coincide con la tabla. Obvio no va a coincidir porque la conexion B actualizó esos datos. Como no coinciden haces an la maquina A un session_destroy();


Caso 2: Supongamos que un usuario le pasa sus datos a un amigo o pariente para que ingrese en el sistema desde otra máquina para que vea información. Cuando ael amigo se conecte, automáticamente la máquina A (usuario real) cuando intente navegar será desconectado porque los datos de tla tabla de control fueron actualizados con el ultimo que inició sesion.

Entonces, por defecto, solo podrá navegar uno solo por vez y ese será el ultimo que inicio sesion, todos los demas serán desconectados.


Soy claro?
  #5 (permalink)  
Antiguo 08/04/2008, 22:18
 
Fecha de Ingreso: septiembre-2006
Ubicación: Buenos Aires
Mensajes: 125
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Problema con Session

Gracias usermax.
Entiendo.
Lo que yo queria evitar es controlar en cada pagina si la session coinside con la IP y la ID y es decir evitar entar todo el tiempo en la base de datos.
Fijate el 1er caso que me planteaste cuando el usuario vuelve al explorador que dejo abierto cuando haga cualquier cosa le tendras que cerrar la session mirando la BD es decir que en cada pagina tenes que controlar la session en la Base de Datos.

Yo lo que queria es cuando el usuario se logea en la maquina B.terminar la session de A con alguna instruccion sabiendo el numero de ID de la session A que estaria en la base de datos.Y asi evitar controlar en cada pagina con la base de datos el tema de la ID y IP.

Saludos.
PD : De implementarlo lo hare como vos decis,ya que no se si existe eso de terminar una session sabiendo su ID.
__________________
alquiler gesell
  #6 (permalink)  
Antiguo 08/04/2008, 22:26
(Desactivado)
 
Fecha de Ingreso: diciembre-2006
Mensajes: 529
Antigüedad: 17 años, 4 meses
Puntos: 11
Re: Problema con Session

Que conozca no, pero cuando se trata de seguridad vale la pena gastar 0.001 segundos en una consulta extra.

No conozco esa funcion. Pero estaría bueno implementarla seguramente se puede.

Aunque te cuento que conla forma que te sugerí aquí yo implemente muchos sistemas y funcionan perfecto el tiempo total de ejecución del sistema completo es de 0.023 segundos es un muy buen tiempo.

Saludos
  #7 (permalink)  
Antiguo 08/04/2008, 22:37
 
Fecha de Ingreso: septiembre-2006
Ubicación: Buenos Aires
Mensajes: 125
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Problema con Session

ok usermax.
Voy a ver si lo implemento en un sistema de usuarios que tengo.

Saludos.
__________________
alquiler gesell
  #8 (permalink)  
Antiguo 09/04/2008, 09:28
 
Fecha de Ingreso: abril-2006
Mensajes: 1.128
Antigüedad: 18 años
Puntos: 33
Re: Problema con Session

cmarrero:
En estos momentos acabo de hacer una prueba asi:
Abri mi navegador con una IP x y entre a un sitio mio que utiliza sesiones de php.
buscando donde se guardan las sesiones pude observar que se creo una sesion con nombre de usuario y contraseña y con un numero de identificacion xyz.
Manteniendo abierta esa conexion logre abrir en otra maquina con una ip diferente, el mismo sitio. Pude observar que se abrio una NUEVA sesion con un numero de identificacion diferente pero con los mismos datos de usuario y contraseña.
Conclusion:
Aun cuando es el mismo usuario y la misma contraseña, hay dos sesiones diferentes representadas por dos numeros de identificacion diferentes.
Ya ustedes pueden derivar y diseñar sus codigos conforme esta informacion real.
Saludos
Y espero les ayude
Franco
P.S. con un simple if(isset($_SESSION['id'])) { puedes controlar el ingreso
No hay necesidad de identificar la IP u otra variable; con el Numero de identificacion de sesion basta.
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 18:43.