Foros del Web » Programando para Internet » PHP »

Cerrar sesion cuando cierre el explorador

Estas en el tema de Cerrar sesion cuando cierre el explorador en el foro de PHP en Foros del Web. Hola por favor si alguien me puede ayudar , estoy en la capa de seguridad y lo unico que me falta es destruir la sesion ...
  #1 (permalink)  
Antiguo 14/06/2006, 08:07
kho
 
Fecha de Ingreso: diciembre-2005
Mensajes: 21
Antigüedad: 18 años, 11 meses
Puntos: 0
Cerrar sesion cuando cierre el explorador

Hola por favor si alguien me puede ayudar , estoy en la capa de seguridad
y lo unico que me falta es destruir la sesion cuando cierre el explorado
¿Como puedo hacerlo ?
  #2 (permalink)  
Antiguo 14/06/2006, 08:36
Avatar de nosoynadie  
Fecha de Ingreso: noviembre-2005
Ubicación: dando vueltas por aquí
Mensajes: 206
Antigüedad: 19 años
Puntos: 1
Cita:
Iniciado por kho
Hola por favor si alguien me puede ayudar , estoy en la capa de seguridad
y lo unico que me falta es destruir la sesion cuando cierre el explorado
¿Como puedo hacerlo ?
Hola,

puedes explicarte un poco mejor, no entendí bien qué es lo que te ocurre
__________________
http://www.nosoynadie.net/
  #3 (permalink)  
Antiguo 14/06/2006, 08:59
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 20 años
Puntos: 1
la sesion no se destruye cuando cierras la ventana?

yo creo que si.. pero en cualquier caso podrías tener un boton "cerrar" que al pulsarlo llamase a la misma pagina y meterle un codigo tal que asi:

<?
if (isset(submit)
{
session_destroy();
echo "<script>window.close();</script>"; //o exit();
}
?>


bueno.. algo por el estilo..
__________________
ALOZORRO v5.0 (ahora en .es)
  #4 (permalink)  
Antiguo 14/06/2006, 09:27
 
Fecha de Ingreso: diciembre-2004
Mensajes: 98
Antigüedad: 19 años, 11 meses
Puntos: 0
Muy buenas:
He leido tu pregunta KHO y es cierto, la sesion queda abierta despues de cerrar la página o salir del navegador, durante un cierto tiempo pasado el cual se destruye, la solución de azrael666 es buena y yo la tengo implementada, pero los usuarios son dados a cerrar con el boton X del navegador, con lo cual no vale para nada, puedes hacer que cada vez que se entre en tu página, veas si existe una sesion y en caso afirmativo cerrarla.
Saludos
  #5 (permalink)  
Antiguo 14/06/2006, 09:29
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 20 años
Puntos: 1
Cita:
puedes hacer que cada vez que se entre en tu página, veas si existe una sesion y en caso afirmativo cerrarla.
ah.. pues no habia pensado yo en esa opción... está bien tenerla en cuenta
__________________
ALOZORRO v5.0 (ahora en .es)
  #6 (permalink)  
Antiguo 14/06/2006, 09:34
Avatar de Azrael666  
Fecha de Ingreso: noviembre-2004
Mensajes: 652
Antigüedad: 20 años
Puntos: 1
mm. acabo de comentarlo con un compañero... por cada usuario hay sesiones diferentes.. incluso si tienes una ventana abierta y abres otra las sesiones serán diferentes.... si cierras una ventana al abrir una nueva te crea otra sesion diferente (con un SID de 40 caracteres o por ahi.. lo cual es bastante dificil que sea la misma sesion de antes..).. con lo que al cerrar la ventana creo que ya no haría falta hacer nada mas.. en cualquier caso yo creo que mi opcion del boton (aunque no la usen por vagancia o lo que sea) sería valida...

creo....
__________________
ALOZORRO v5.0 (ahora en .es)
  #7 (permalink)  
Antiguo 14/06/2006, 10:02
 
Fecha de Ingreso: diciembre-2004
Mensajes: 98
Antigüedad: 19 años, 11 meses
Puntos: 0
Buenas de nuevo:
La seguridad siempre es importante y de hecho yo tengo puestas las dos, incluso probe con unonload de javascrip de forma que al cerrar la ventana hiciera un sesion destroy() pero la mayoria de las veces no funcionaba.
Esto viene al caso de lo siquiente:
Tienes una página www.mia.com/acceso.php, esta te pediría usuario y password, pasando despues a la página restringida.php, si el usuario y el password son correctos.
Si sales con la X del navegador y vuelves a entrar directamente en restringida.php sin pasar por el acceso te permite hacerlo ya que la sesion sigue abierta, pregunte si había alguna forma de detectar cuando se cierra la ventana pero parece que no es posible.
He visto por ahí que lo que hacen es restringir el tiempo que esta activa una sesion pero tambien da problemas, sobre todo al usuario que tiene que autentificarse cada vez que se le acaba.
Saludos
  #8 (permalink)  
Antiguo 14/06/2006, 10:08
 
Fecha de Ingreso: diciembre-2004
Mensajes: 98
Antigüedad: 19 años, 11 meses
Puntos: 0
Perdon, la página que puse para indicar mi ejemplo existe de verdad pero no tiene nada que ver, se me ocurrio como ilustración
Perdon de nuevo
Saludos
  #9 (permalink)  
Antiguo 14/06/2006, 10:21
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
¿Como propagas el SID en tu uso de sesiones (configuración php.ini) y aplicación (código).?

Si propagas el SID en cookies (session.use_cookies = on y session.use_cookies = on además de session.use_trans_sid a OFF) definiendo la vida de esa cookie que propagará el SID en session.cookie_lifetime a 0, se crea una cookie de "sesión" (valga la rebundancia, de tiempo de vida 0 segundos) la cual se "mata" al cerrar la última ventana de tu sitio y con ella se muere el SID que la enlaza con la sesión creada en el servidor, lo cual no implica que la sesión se muera también o elimine .. eso ya depende en última instancia de la directiva: session.gc_maxtimelife (normalmente y por defecto se define a unos 24 minutos = 1440 segundos).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #10 (permalink)  
Antiguo 14/06/2006, 10:30
Avatar de Stickmaster2004  
Fecha de Ingreso: septiembre-2004
Ubicación: Barranquilla
Mensajes: 568
Antigüedad: 20 años, 2 meses
Puntos: 0
Forma facil en php

bueno, he escuchado mucho de que las cookies al lado del cliente son un problema por que en general bueno este no puede tener habilitada las cookies, tambien se considera que si se utiliza php hay que configurar el php.ini, pero......., no hay una forma eficaz y sencilla de decirle en php, bueno que a los 5 minutos bueno le cierra la sesion y a cualquier accion en la pagina lo lleve a la pagina donde aparece el nombre de usuario y contraseña???.

eso es todo.
__________________
Solo el que se basa en conocimiento basico y cultiva el aprendizaje obtendra sabiduria
  #11 (permalink)  
Antiguo 14/06/2006, 10:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Si sales con la X del navegador y vuelves a entrar directamente en restringida.php sin pasar por el acceso te permite hacerlo ya que la sesion sigue abierta, pregunte si había alguna forma de detectar cuando se cierra la ventana pero parece que no es posible.
Esto depende directamente de como propagues el SID. Si propagas el SID en el URL .... hasta por el historial del navegador si la sesión sigue en curso (session.gc_maxtimelife sigue activa) podrías entrar denuevo a tu sesión abierta .. lo mismo que si le pasas a alguien ese link con el SID en ella propagado.

Este tema de seguridad lo trata este documento recomendado por PHP.net directamente:
http://www.acros.si/papers/session_fixation.pdf

Otro detalle a tener encuenta aunque se propaga el SID en cookies y se defina un tiempo de vida de esa cookie como "de sesión" (cero, 0 segundos en session.cookie_lifetime = 0), ... no es válido que se "cierre" una sóla ventana del sitio para que la cookie se "muera" .. hay que cerrar toda ventana del sitio activo .. sino la cookie sigue "viva" y retomará la sesión por su SID válido.

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 14/06/2006, 10:49
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por Stickmaster2004
bueno, he escuchado mucho de que las cookies al lado del cliente son un problema por que en general bueno este no puede tener habilitada las cookies, tambien se considera que si se utiliza php hay que configurar el php.ini, pero......., no hay una forma eficaz y sencilla de decirle en php, bueno que a los 5 minutos bueno le cierra la sesion y a cualquier accion en la pagina lo lleve a la pagina donde aparece el nombre de usuario y contraseña???.

eso es todo.
Bueno .. creo que el problema de la habilitación de cookies o no depende del usuario. Se que todo el mundo no está al mismo nivel .. que no todos leen al respecto .. otros se ven "Alarmados" por gente que anda como la "inquisición" definiendo a la cookie como el "enemigo público n°1" cuando esto pasa por un tema de -saber- quien me pide crear una cookie en mi equipo y así autorizarla o no según de donde provenga.

NO es problema de seguridad como hace PHP en propagar en ella el SID (no los datos que están en el servidor .. sólo se propaga la "referencia" que hace en el servidor a esos datos).

De hecho en el documento (PDF) que menciono en mi anterior mensaje se exponen los problemas de propagar el SID en el URL (para no depender de que el cliente acepte cookies o no ).

Cita:
tambien se considera que si se utiliza php hay que configurar el php.ini,
Es ahí donde se define principalmente como quieres propagar el SID .. tu decides escuchando los "pros" y los "contras" de uno u otro método. Alguna de esta configuración se puede hacer también en tiempo de ejecución via: ini_set() función.

Cita:
no hay una forma eficaz y sencilla de decirle en php, bueno que a los 5 minutos bueno le cierra la sesion y a cualquier accion en la pagina lo lleve a la pagina donde aparece el nombre de usuario y contraseña???.
Esto PHP no lo hace por tí con una simple función o configuración. PHP gestiona las sesiones en forma general, no individual: tiempos de expiración .. etc. Es tu aplicación la que "definirá" como ha de tratar una "sesión" .. en algunos casos te interesará cerrar cualquier sesión creada a cierto tiempo . .en otros no, tambien te interesará "matar" una sesión tal vez "selectivamente" o definir un tiempo de vida de cada sesión en forma individual .. bueno, la mayoría de estas cosas PHP y sus sistema de sesiones clásico no lo implementa, pero si que tienes soluciones que sustituyen en parte a lo que PHP no hace o poco implementa al respecto como por ejemplo:

ADOdb
http://phplens.com/lens/adodb/docs-session.htm
(no es el único .. pero si tal vez el más completo al respecto).

Una vez que soluciones el tema de la "caducidad" de tu variable de sesión .. el tema de "redireccionar" si expiró lo haces con un simple:

Código PHP:
session_start();
if (empty(
$_SESSION['alguna_variable'])){
  
header ("Location: login.php");
  exit;

(pero antes .. debes tener resuelto el tiempo de expiración de tu sesión en curso .. ya sea que lo hagas como PHP lo hace o por otro médio como usando alguna classe/aplicación tipo ADOdb ... o código própio)

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #13 (permalink)  
Antiguo 14/06/2006, 10:58
 
Fecha de Ingreso: diciembre-2004
Mensajes: 98
Antigüedad: 19 años, 11 meses
Puntos: 0
Vamos con la seguridad

Hola cluster:
De todo lo que has comentado estoy en linea, solo hay una que me es imposible cambiar y es session.use_trans_sid a OFF ya que aunque empiece el script con ini_set("session.use_trans_sid","0"); no me hace caso ya que en php_ini solo puedo cambiar aquellas que corresponden al usuario, como ini_set("session.use_only_cookies","1");
Saludos

Me leere el documento que dices auque este en ingles y me cueste bastante
Muchas gracias por todo, por cierto te vote excelente al autentificador.
  #14 (permalink)  
Antiguo 14/06/2006, 11:10
 
Fecha de Ingreso: diciembre-2004
Mensajes: 98
Antigüedad: 19 años, 11 meses
Puntos: 0
Ejemplo curioso

hola de nuevo:
Acabo de escribir una respuesta y al dar al boton de enviar me ha dicho que la sesion ha expirado, he introducido los datos y me inicia sesion y ademas incluye mi respuesta, hasta aquí todo normal.
Se me ha ocurrido dar al boton de atrás y curiosamnete ha vuelto a iniciar la sesion sin pedir datos y ha vuelto a incluir la respuesta, ¿puede ser que esto ocurra por caducar la sesión prontamente o no tiene nada que ver lo que digo?
Saludos
  #15 (permalink)  
Antiguo 14/06/2006, 11:57
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por jomoli
Hola cluster:
De todo lo que has comentado estoy en linea, solo hay una que me es imposible cambiar y es session.use_trans_sid a OFF ya que aunque empiece el script con ini_set("session.use_trans_sid","0"); no me hace caso ya que en php_ini solo puedo cambiar aquellas que corresponden al usuario, como ini_set("session.use_only_cookies","1");
Saludos

Me leere el documento que dices auque este en ingles y me cueste bastante
Muchas gracias por todo, por cierto te vote excelente al autentificador.
Revisa la documentación de ini_Set() www.php.net/ini_set (en ingles de preferencia pues está más completa normalmente), ahí tienes las directivas del php.ini y como puedes alterar su valor inicial (por script, por php.ini sólo o por .htaccess o equivalente).

Algunas directivas sólo se pueden modificar vía .htaccess o algún php.ini o equivalente que tu proveedor te asigne para tu sito concreto en ese servidor (tendrás que conversarlo con tu servicio de hosting).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #16 (permalink)  
Antiguo 14/06/2006, 11:59
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 10 meses
Puntos: 129
Cita:
Iniciado por jomoli
hola de nuevo:
Acabo de escribir una respuesta y al dar al boton de enviar me ha dicho que la sesion ha expirado, he introducido los datos y me inicia sesion y ademas incluye mi respuesta, hasta aquí todo normal.
Se me ha ocurrido dar al boton de atrás y curiosamnete ha vuelto a iniciar la sesion sin pedir datos y ha vuelto a incluir la respuesta, ¿puede ser que esto ocurra por caducar la sesión prontamente o no tiene nada que ver lo que digo?
Saludos
No entendí bien el procedimiento que seguistes .. pero en principio si ya te autentificastes, la cookie donde estos foros propaga el SID ya se creó .. en consecuencia en cuanto a sesiones ya estabas autentificado. Otros problemas sobre el "re-envio" de datos (de un formulario) ya es cosa del navegador y el método usado (así se comportan cuando se usa método POST, aunque este foro usa mucho "Ajax" .. ahí no sé como se comporta este tema en concreto).

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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:04.