Foros del Web » Programando para Internet » PHP »

Evitar multisesion

Estas en el tema de Evitar multisesion en el foro de PHP en Foros del Web. Buenas a todos! Estoy intentando implementar en mi proyecto, un sistema para que un usuario registrado en la BD, solo pueda estar conectado una sola ...
  #1 (permalink)  
Antiguo 07/06/2012, 03:33
 
Fecha de Ingreso: mayo-2012
Ubicación: Sevilla
Mensajes: 11
Antigüedad: 12 años, 5 meses
Puntos: 1
Evitar multisesion

Buenas a todos!

Estoy intentando implementar en mi proyecto, un sistema para que un usuario registrado en la BD, solo pueda estar conectado una sola vez con esas credenciales.

He estado mirando, y lo que me interesaria es que cuando un usuario esta logeado, por ejemplo con user=root pass=root, si otro se intenta logear con las mismas credenciales, este ultimo se logee y elimine la sesion del anterior.

Tengo una bd con dos campos, uno que contendra una variable de la sesion, y el otro que sera el id de la sesion. No se si necesito alguno mas.

Lo estoy intentando implementar pero no lo consigo, el codigo que tengo es este:

- Este es un archivo que agrego a todos mis archivos php, para controlar que el archivo esta logeado, es decir que se ha creado una sesion.
Código:
session_cache_limiter();
// Inicio la sesión
session_start();
// Para que al cerrar la ventana se termine la sesion
session_set_cookie_params(0, "/", $_SERVER["HTTP_HOST"], 0); 

// Comprobamos que el usuario esta logeado
if ($_SESSION["logeado"] != "si") {
    //si no existe, envio a la página de autentificacion
    header("Location: index.php");
    //ademas salgo de este script
    exit();
}
Creo que lo ideal, seria colocar un else para comprobar que si esta logeado en la web, mirar en la tabla sesiones si existe su sesion, y si ya existe actualizar el campo id_sesion con esta nueva sesion y eliminar la anterior, y si no crear un nuevo registro en la tabla.

Esta ultima parte no me viene el codigo a la cabeza ahora mismo, si podeis echarme una mano os lo agradezco

Saludos!!
  #2 (permalink)  
Antiguo 07/06/2012, 03:54
 
Fecha de Ingreso: septiembre-2005
Mensajes: 840
Antigüedad: 19 años, 2 meses
Puntos: 84
Respuesta: Evitar multisesion

Lo unico que se me ocurre, es que guardes sesiones en la base de datos de mysql

Del tipo de "Usuario","IP","FECHA_SESION",SESION_SERIALIZA DA


Cuando alguien se loguea, para ese usuario se cambia la IP en la base de datos de la session, y se escribe toda la sesion.

Cada vez que cambia la pagina, compruebas que en ese registro, la ip que se use sea la que tiene el usuario.

En el momento en que no coincida, mandas a ese usuario a volverse a registrar.


Igual hay algo mas optimizado para eso, pero es lo unico que se me ocurre ahora =)
__________________
» Presupuesto Pagina Web
  #3 (permalink)  
Antiguo 07/06/2012, 04:07
 
Fecha de Ingreso: mayo-2012
Ubicación: Sevilla
Mensajes: 11
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Evitar multisesion

Lo que me has comentado esta bien, lo que pasa que tiene el problema de que si la misma persona se conecta desde dos navegadores distintos en el mismo pc, ya se lo traga no? y no deberia xD

Podria ser algo asi como "usuario" y "ID_SESION"??
Al hacer el login dberia comprobar en la tabla sesiones que no exista ya ese usuario, y si existe actualizarle el id_sesion por el de la nueva sesion creada..... pero como saco al otro que esta usando el mismo usuario???
  #4 (permalink)  
Antiguo 07/06/2012, 04:21
 
Fecha de Ingreso: septiembre-2005
Mensajes: 840
Antigüedad: 19 años, 2 meses
Puntos: 84
Respuesta: Evitar multisesion

tambien puedes guardar el navegador del usuario, y si es distinto, hacer lo mismo =)
__________________
» Presupuesto Pagina Web
  #5 (permalink)  
Antiguo 07/06/2012, 05:28
Avatar de Uncontroled_Duck
Colaborador
 
Fecha de Ingreso: mayo-2011
Ubicación: Málaga [Spain]
Mensajes: 806
Antigüedad: 13 años, 6 meses
Puntos: 261
Respuesta: Evitar multisesion

Cita:
Iniciado por Julio1421 Ver Mensaje
[...]pero como saco al otro que esta usando el mismo usuario???
La única forma que conozco es controlar todas las sesiones mediante la base de datos con session_set_save_handler.

Si cierras una sesión en la base de datos, se cierra la sesión al usuario. Y si puedes controlar que el id del usuario se repita solo una vez.

Bien configurado cumple perfectamente con lo que buscas.

Saludos,
__________________
Todos agradeceremos que pongas el código en su respectivo Highlight
  #6 (permalink)  
Antiguo 07/06/2012, 07:56
 
Fecha de Ingreso: mayo-2012
Ubicación: Sevilla
Mensajes: 11
Antigüedad: 12 años, 5 meses
Puntos: 1
Respuesta: Evitar multisesion

Con lo que me has comentado lo he conseguido hacer! Ahora solo me queda un problemilla por resolver.

Al codigo de arriba le he agregado un else con este contenido:
Código:
include('conexion.php');
	
	$paletta = $_SESSION['paletta'];
	$id = session_id();
	
	$sesion = mysql_query("Select * from sesiones where paletta = $paletta && id_sesion = '$id'",$con) or die ("No se pudo consultar la tabla sesiones");
	
	// Si no existe la sesion en la tabla
	if(mysql_num_rows($sesion)==0){
		header("Location: index.php?error=4");
		exit();
	}
Esto lo tengo en un archivo php, que incluyo en dos divs que tengo en una pagina. El problema esta en que si hago el header tal como lo tengo ahora, se me abre la web en cada uno de los divs, y yo lo que quiero esque se me abra en toda la pagina completa o hacer cualquier otra cosa para que me salga de esa web.

Se os ocurre algo?

Etiquetas: registro, tabla, variables, 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 14:07.