Foros del Web » Programando para Internet » PHP »

Cerrar sesion en php al cerrar navegador

Estas en el tema de Cerrar sesion en php al cerrar navegador en el foro de PHP en Foros del Web. Hola: soy nuevo en el tema de la programación (en php) y estoy haciendo uso de sesiones para un sitio administrativo, el problema que encuentro ...
  #1 (permalink)  
Antiguo 25/10/2006, 21:52
 
Fecha de Ingreso: octubre-2006
Mensajes: 8
Antigüedad: 17 años, 5 meses
Puntos: 0
Cerrar sesion en php al cerrar navegador

Hola: soy nuevo en el tema de la programación (en php) y estoy haciendo uso de sesiones para un sitio administrativo, el problema que encuentro ahora es que al cerrar el navegador directamente sin cerrar sesion previamente, la sesion sigue abierta (por un corto tiempo).... la pregunta es como podria hacer para que se cierre la sesion al cerrar el navegador? ya que no estoy haciendo uso de cookies en la maquina del usuario....
Otro de los problemas es que he hecho un script que se fija en una base de datos de mysql cuantos usuarios conectados hay actualmente, la cuestion está en que si el usuario cierra la ventana del navegador directamente en la base de datos seguira figurando como conectado hasta que otra persona se loguee y se actualice la base de datos...hay algun script que al cerrar una ventana de navegador abra otra que cierre sesion y actualice la base de datos??? Gracias....

Saludos a todos ....Daniel...
  #2 (permalink)  
Antiguo 26/10/2006, 00:07
 
Fecha de Ingreso: noviembre-2003
Ubicación: Puente de ixtla
Mensajes: 773
Antigüedad: 20 años, 5 meses
Puntos: 0
puedes buscar algo en el foro de javascript, bueno eso me imagino, porque lo que tu quieres es que cuando ocurra cierto evento se cierre la sesion, y pues puedes usar otro script que sea el que utilizen mas en tu pagina y ponerle a ese script que cheque los usuarios y si ya salieron que los saque de sesion.

Espero y me entiendas y que yo te haya entendido
__________________
°º¤ø,¸¸,ø¤º°`°º¤ø,¸S@M°º¤ø,¸¸,ø¤º°`°º¤ø,¸.
Dios solo nos dio el 0 y el 1 y con solo eso hemos construido un universo
  #3 (permalink)  
Antiguo 26/10/2006, 05:49
 
Fecha de Ingreso: octubre-2006
Mensajes: 8
Antigüedad: 17 años, 5 meses
Puntos: 0
Gracias....

Gracias Ixtleco por tu respuesta vere entonces en los foros de javascript....Saludos Daniel
  #4 (permalink)  
Antiguo 26/10/2006, 06:48
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Puedes ajustar el tiempo de vida de tus sesiones.

Propagando el SID en cookies y ajustando el tiempo de vida de esa cookie:

session.use_trans_sid = 0
session.use_cookies = 0
session.use_only_cookies = 0

session.cookie_lifetime = 0

(revisa tu configuración de PHP sobre sesione: php.ini o por un phpinfo()

Así genera PHP para propagar el SID una cookie tipo "sesión" .. el tiempo de expiración de esta cookie "0" hace que al cerrar tu navegador la cookie muera y con ella el SID que propaga y relaciona tus datos entre cliente y servidor para la sesión. Esto no quiere decir que la sesión siga activa (si re-uso el mismo SID por otro médio) .. pero al forzar la propagación del SID en cookies .. no tendría problemas por ese lado. De todas formas la vida de la sesión en sí lo define: session.gc_maxtiemlife ..

más info:
www.php.net/session

[quote]Otro de los problemas es que he hecho un script que se fija en una base de datos de mysql cuantos usuarios conectados hay actualmente, la cuestion está en que si el usuario cierra la ventana del navegador directamente en la base de datos seguira figurando como conectado hasta que otra persona se loguee y se actualice la base de datos...hay algun script que al cerrar una ventana de navegador abra otra que cierre sesion y actualice la base de datos??? Gracias....[/qutoe]

Podrías manejar el tema con javacript .. detectando el evento "onUnload()" . .pero para nada es seguro ese método sin contar con los procesos de escripts PHP que no generan salida (por ejemplo que redireccionen por cabeceras HTTP .. ).

En estos casos se implementan sistemas de "inactividad" .. es decir, registrar la última fecha/hora de actividad de tu usuario en el sistema (sobre una BBDD relacionado con el usuario en cuestión) y actualizando dicho dato a -cada- iteracción con tu sistema (en todos tus scripts/páginas). Así puedes comprara la fecha/hora actual con la que ese usuario almacena de última iteracción con el sistema y así determinar que el usuario "ya no está en el sistema" si ha sobrepasado cierto tiempo que tu definas y que será el "margen" de error que vas a tener para saber si realmente tu usuario está en el sistema o "probablemente cerró" la aplicación no por tu botón de "logout" o "salir" que destruye y ajusta ese dato.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #5 (permalink)  
Antiguo 26/10/2006, 16:30
 
Fecha de Ingreso: octubre-2006
Mensajes: 8
Antigüedad: 17 años, 5 meses
Puntos: 0
Gracias...

Gracias Cluster por tu aporte, mirando en la web encontre un script similar a lo que yo quiero y lo reforme, asi que guarda los datos en la base de datos y se actuliza al iniciar sesion o cambiar de pagina cada usuario... Muy agradecido por tu informacion... Saludos Daniel....
  #6 (permalink)  
Antiguo 26/10/2006, 17:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por daplp Ver Mensaje
Gracias Cluster por tu aporte, mirando en la web encontre un script similar a lo que yo quiero y lo reforme, asi que guarda los datos en la base de datos y se actuliza al iniciar sesion o cambiar de pagina cada usuario... Muy agradecido por tu informacion... Saludos Daniel....
No está de más que indiques que script usastes (donde lo vistes) .. le puede servir a otra persona también.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #7 (permalink)  
Antiguo 30/10/2006, 13:08
 
Fecha de Ingreso: octubre-2006
Mensajes: 8
Antigüedad: 17 años, 5 meses
Puntos: 0
Acá esta la función...

function usuarios_conectados($id_usuario)
{
//usar ip
global $REMOTE_ADDR;

//sacamos la ip del visitante y el tiempo actual
$ip = $REMOTE_ADDR;
$ahora = time();

//conecto a la base de datos
$link = mysql_connect("direccion host","usuario","password");
//selecciono db
mysql_select_db("nombre bd",$link);

//actualizamos la base de datos y borramos las sesiones inactivas hace mas de x minutos
$limite = $ahora-x*60;
//actualizo la tabla usuarios_conectados de la base de datos
$ssql = "delete from usuarios_conectados where tiempo < ".$limite;
mysql_query($ssql,$link);

//miramos si el ID del visitante existe en nuestra tabla
$ssql = "select idusuario from usuarios_conectados where idusuario = '$id_usuario'";
$result = mysql_query($ssql,$link);

//si existe actualizamos el campo tiempo

$cant = mysql_num_rows($result);
if ($cant != 0) $ssql = "update usuarios_conectados SET tiempo = ".$ahora." where idusuario = '$id_usuario'";
//si no existe insertamos el registro correspondiente a la nueva sesion
else $ssql = "insert into usuarios_conectados (idusuario, tiempo, ip) values ('$id_usuario', '$ahora', '$ip')";
//ejecutamos la sentencia sql
mysql_query($ssql,$link);

//calculamos el numero de sesiones
$ssql = "select idusuario from usuarios_conectados";
$result = mysql_query($ssql);
$usuarios = mysql_num_rows($result);

//liberamos memoria
mysql_free_result($result);
mysql_close($link);
//devolvemos el resultado
return $usuarios;
}

la función (en este caso) la llamo $usuarios = usuarios_conectados(id_usuario) y me devuelve la cantidad de usuarios conectados...

La tabla usuarios_conectados en la bd tiene los siguientes campos...
*idusuario (INTEGER 15)
*tiempo (INTEGER 15)
*ip (VARCHAR 20)

Espero que sirva....Suerte...Daniel

Última edición por daplp; 30/10/2006 a las 13:19
  #8 (permalink)  
Antiguo 30/10/2006, 13:22
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 2 meses
Puntos: 2
Pregunta Cuando se cierra la ventana hace eso???

Saludos daplp
En que momento ejecutas ese codigo??

No veo un onunload o algo asi...
  #9 (permalink)  
Antiguo 30/10/2006, 16:32
 
Fecha de Ingreso: octubre-2006
Mensajes: 8
Antigüedad: 17 años, 5 meses
Puntos: 0
Respuesta para tattojk...

Hola Tattojk:

La función la debes llamar cada vez que un usuario inicie sesion o cada vez que actualice o se abra una pagina nueva, así la base de datos se actualiza continuamente y la función te retorna la cantidad de usuarios conectados en ese instante.
Si alguien no cierra sesión y cierra directamente la ventana del navegador en la base de datos figurará que ese usuario está conectado y se actualizará cuando alguien inicie sesion...
Para acortar la duración de la sesion por si alguien cierra la ventana del navegador y no cierra sesion mirá los comentarios de Cluster arriba que son interesantes...Espero haberte sido útil... Saludos Daniel...
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:45.