Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Registro de sesión...y si no se cierra sesión?

Estas en el tema de Registro de sesión...y si no se cierra sesión? en el foro de PHP en Foros del Web. Buenas, estoy haciendo un programa en php y sql, y tengo una tabla con usuarios, pero no llevo el control de cuando están conectados y ...
  #1 (permalink)  
Antiguo 24/07/2013, 05:31
 
Fecha de Ingreso: marzo-2013
Ubicación: Jaén, Andalucía
Mensajes: 129
Antigüedad: 11 años, 1 mes
Puntos: 2
Registro de sesión...y si no se cierra sesión?

Buenas, estoy haciendo un programa en php y sql, y tengo una tabla con usuarios, pero no llevo el control de cuando están conectados y cuando no, se me ocurre poner una columna en la tabla con 0 (desconectado) o 1 (conectado) y comprobar al iniciar sesión y cambiarlo (hasta aquí no hay problema), lo que pasa, es que la gente a la que está destinada no le gusta eso de cerrar sesión ...cierra el navegador .... ¿Cómo podría hacer que pase cierto tiempo se ponga ese valor a cero y se destruya la sesión? y mi mayor miedo....en caso de que cierren el navegador, se destruiría la sesión?...como haría para poner en mi base de datos el valor a 0? ya que si no se quedaría bloqueado el usuario.... Gracias de Antemano!!
  #2 (permalink)  
Antiguo 24/07/2013, 05:47
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Registro de sesión...y si no se cierra sesión?

Creo que ese planteamiento no es eficiente ni bueno.

Toda sesión tiene un id de sesión lo que debes controlar es que todas las acciones que se realicen, que no supongan un nuevo "logueo" se hagan con el mismo id de sesión... si quieres saber de que usuario se trata puedes guardar su nombre en una variable de sesión.... no es necesario guardar en la base de datos nada....

Solo se me ocurren complicaciones a este modelo si quieres que los usuarios logueados interactúen entre ellos...es decir que las sesiones respectivas de alguna forma se vean entre si... ahí esperaría las respuestas de alguien que haya tratado el caso.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 25/07/2013, 00:47
 
Fecha de Ingreso: marzo-2013
Ubicación: Jaén, Andalucía
Mensajes: 129
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Registro de sesión...y si no se cierra sesión?

Muchas gracias, pero no te he entendido muy bien :S:S:S , es decir en cada ip las variables de sesión son distintas no???? cómo podría hacer para que me dijese que un usuario ya está logueado con las variables de sesión???? Gracias! si no hay que tocar nada de la base de datos mucho mejor! es que no sabía si de esa manera se podía
  #4 (permalink)  
Antiguo 25/07/2013, 00:52
 
Fecha de Ingreso: julio-2008
Ubicación: Córdoba, Argentina
Mensajes: 266
Antigüedad: 15 años, 9 meses
Puntos: 26
Respuesta: Registro de sesión...y si no se cierra sesión?

Por lo que veo no necesitas guardar ese dato en la base de datos. Si cuando realizas la verificación del login el usuario es válido (nombre y contraseña correctos) sólo deberías poner algo como $_SESSION['esta_logueado'] = TRUE; y listo, con eso ya puedes preguntar si ese usuario en particular está logueado o no (en valor de esa variable varía según cada usuario que vista la página, no es global). Sólo necesitarías usar la base de datos si quieres, por ejemplo, conocer todos los usuarios que están actualmente en línea. Saludos.
  #5 (permalink)  
Antiguo 25/07/2013, 01:58
 
Fecha de Ingreso: marzo-2013
Ubicación: Jaén, Andalucía
Mensajes: 129
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Registro de sesión...y si no se cierra sesión?

yo actualmente utilizo este código.....
Código PHP:
Ver original
  1.  
  2. $user = strip_tags($_POST['user']); //lo que recojo de la página de login
  3. $pass = strip_tags(sha1($_POST['pass']));
  4.  
  5.  
  6. $query = mysql_query('SELECT * FROM usuarios WHERE user="'.mysql_real_escape_string($user).'" AND pass="'.mysql_real_escape_string($pass).'"');
  7. if($existe = mysql_fetch_object($query))
  8. {
  9.     $_SESSION['logged'] = 'yes';
  10.     $_SESSION['user'] = $user;




Edito: he probado a hacer esto y funciona!

Código PHP:
Ver original
  1. $_SESSION['user'] = $user;
  2.     if($_SESSION['logged'] == 'yes'){
  3.         echo"Este usuario está activo.";
  4.         exit;
  5.     }else{
  6.         $_SESSION['logged'] = 'yes';
  7.     }


pero no entiendo porque funciona, ya que me da un warnin en la linea del if, que me dice que esa variable no está definida.....
supongo que será porque si no hay sesión para ese usuario, no se puede controlar esa variable verdad? para que no me muestre el warning he puesto
Código PHP:
Ver original
  1. ini_set('error_reporting',0);
ya que he leido en varios sitios que con los warnings hay gente que puede atacar tu programa verdad?=????



Edito2: no me funciona del todo.... solo se va la sesión al cerrar el navegador por completo..... pero yo tengo un código logout.php en el que realizo lo siguiente:

Código PHP:
Ver original
  1. $_SESSION['user'] = "";
  2.     session_start();
  3.     if($_SESSION['logged'] != "yes"){
  4.         echo"No tienes permisos para estar aqui"; //Para que no cierren sesiones ajenas
  5.         exit;
  6.     }
  7.    
  8.     $_SESSION['user'] = "";
  9.         $_SESSION['logged'] = "no";
  10.     session_unset();

me salgo cerrando sesión (que redirige a este código), me voy al inicio, me logueo y me dice que el usuario está activo :S:S .... ¿Cómo puedo solucionar eso?


Edito3: perdondad el tostón este que estoy liando XD, pero quisiera saber si el tema puede estar relacionado con setcookie() , he leido algo, pero no me entero muy bien de como funciona...podrías ponerme algun ejemplillo o explicarme como iría??? Gracias

Última edición por kobety; 25/07/2013 a las 05:00
  #6 (permalink)  
Antiguo 25/07/2013, 05:36
 
Fecha de Ingreso: julio-2010
Mensajes: 275
Antigüedad: 13 años, 10 meses
Puntos: 21
Respuesta: Registro de sesión...y si no se cierra sesión?

Más o menos entiendo tu plantamiento, no quieres que dos usuarios en distintas máquinas entren con la misma cuenta...

Lo que se me ocurre es que hagas un script en segundo plano que verifique en la base de datos si el usuario está conectado haciendo el uso de sesiones.
  #7 (permalink)  
Antiguo 25/07/2013, 05:39
 
Fecha de Ingreso: marzo-2013
Ubicación: Jaén, Andalucía
Mensajes: 129
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Registro de sesión...y si no se cierra sesión?

Gracias por responder, ya medio me funciona con lo que he puesto arriba, lo malo de la base de datos, sería que si el usuario, no cierra sesión (a conciencia, cosa que no suele pasar...), el valor de la base de datos se quedaría como activo....y entonces ya no podría volver a entrar....o eso creo yo.....con lo último que he puesto, me funciona, pero al cerrar el navegador, es decir, que ya solo tendría que poner que las cookies se vayan al cerrar sesión (ya que al cerrar el navegador se van)... Gracias!
  #8 (permalink)  
Antiguo 26/07/2013, 01:31
 
Fecha de Ingreso: marzo-2013
Ubicación: Jaén, Andalucía
Mensajes: 129
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Registro de sesión...y si no se cierra sesión?

Buenas, algo falla y no se el por qué :( ....veréis hago un resumen....este es mi index.php
Código PHP:
Ver original
  1. $_SESSION['user'] = $user;
  2.     if($_SESSION['logged'] == 'yes'){
  3.         echo"Este usuario está activo.";
  4.                
  5.         exit;
  6.     }else{
  7.         $_SESSION['logged'] = 'yes';
  8.         setcookie("$user", "", time()+86400, "/");
  9.         }

y este mi logout.php

Código PHP:
Ver original
  1.     if($_SESSION['logged'] != "yes"){
  2.         echo"No tienes permisos para estar aqui";
  3.         exit;
  4.     }
  5.    
  6.     $_SESSION['user'] = "";
  7.     $_SESSION['logged'] = "no";
  8.    
  9.     setcookie("$user", "", time() - 36000000, "/");
  10.    
  11.    
  12.     session_unset();

tengo un programa en local para usarlo por red compartida, pero la cosa es k si inicio la sesión desde el mismo navegador me dice que el usuario está activo, pero sin embargo, abro una pestaña de incognito o desde otro pc....y me loguea :( :( :( :( alguien podría decirme k hacer?
  #9 (permalink)  
Antiguo 26/07/2013, 03:59
 
Fecha de Ingreso: marzo-2013
Ubicación: Jaén, Andalucía
Mensajes: 129
Antigüedad: 11 años, 1 mes
Puntos: 2
Respuesta: Registro de sesión...y si no se cierra sesión?

al final lo he hecho con php y sql!! voy guardando en la base de datos un valor 0 o 1 si está conectado o no y la última conexión que realizó.....en varias páginas (solo con meterse) se refresca esa hora (en las acciones más habituales) y he puesto en el menu principal que no pueda acceder si está conectado y hace más de 30 minutos que no ha realizado ninguna acción, por supuesto, he puesto que en el logout se ponga el valor a cero :P , ha sido un poco tostón sobre todo para comparar las horas, el resto ha sido muy facilito ^^

Etiquetas: cierra, registro, sql, tabla, 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 19:10.