2010-10-20 22 views
21

De acuerdo con la documentación de Django, "si SESSION_EXPIRE_AT_BROWSER_CLOSE se establece en True, Django utilizará cookies de longitud de navegador, cookies que caducan tan pronto como el usuario cierre su navegador. Use esto si desea que las personas tengan que iniciar sesión cada vez que abren un navegador ".¿Por qué SESSION_EXPIRE_AT_BROWSER_CLOSE = True no registra al usuario cuando se cierra el navegador?

Y eso es lo que hice añadiendo la siguiente línea a mi archivo settings.py (y reiniciar el servidor):

# Close the session when user closes the browser 
SESSION_EXPIRE_AT_BROWSER_CLOSE = True 

Entonces Me he registrado en una página que comprueba si el usuario es autenticado, y luego cerré el navegador. Cuando abro mi navegador y visitar de nuevo la misma página que no pide un nombre de usuario y una contraseña, ya que pasa a la siguiente prueba parecer:

def check_teacher(request): 
    result = {} 
    if request.user.is_authenticated(): 
     ... 

¿Qué estoy haciendo mal o lo que me estoy perdiendo? ¿Alguna sugerencia?

Estoy utilizando Django versión 1.3 pre-alpha SVN-13858 en mi sistema Ubuntu GNU/Linux 10.10 y estoy ejecutando el ejemplo anterior usando el servidor de desarrollo Django.

+1

Probablemente ya haya almacenado en su navegador una cookie de larga duración antes de cambiarla por una sesión. Intenta eliminar tus cookies –

+0

Funcionó solo una vez :(Eliminé las cookies y los inicios de sesión activos en mi Firefox (usando Herramientas -> Borrar historial reciente) luego cerré el navegador y cuando traté de visitar la página nuevamente solicité el nombre de usuario y la contraseña. Ingresé y luego cerré el navegador, luego lo abrí de nuevo, visité la misma página pero esta vez no volví a preguntar. Cerré y volví a abrir algunas veces y desafortunadamente nunca volvió a cerrar la sesión. –

Respuesta

19

Cerrar la pestaña o ventana no cuenta como cerrar el navegador. Asegúrese de salir del programa del navegador para finalizar una sesión del navegador.

Si eso no ayuda, use FireBug en Firefox o Web Inspector en Safari para verificar los encabezados en la respuesta en el hit de su página inicial. El golpe inicial de la página puede ser una de muchas cosas; cuando abre el navegador por primera vez, cuando cierra la sesión o inmediatamente después de borrar las cookies. Con SESSION_EXPIRE_AT_BROWSER_CLOSE = True debería ver algo como esto en la cabecera:

Set-Cookie:sessionid=f4c06139bc46a10e1a30d5f0ab7773e2; Path=/ 

Y cuando SESSION_EXPIRE_AT_BROWSER_CLOSE = False se añadirá un valor expires=...:

Set-Cookie:sessionid=a532f3d7dc314afc58e8f676ed72280e; expires=Wed, 03-Nov-2010 17:08:45 GMT; Max-Age=1209600; Path=/ 

Si tiene dificultades para ver el encabezado Set-Cookie debido a que vuelve a dirigir puede intentar usar django-debug-toolbar para romper los redireccionamientos en varias páginas.

+0

La situación es un poco clara para ahora: cuando mantengo abierta la pestaña que incluye mi aplicación Django y le digo a Firefox que "guarde mis pestañas y ventanas para la próxima vez que comience", y luego cierro y reinicio Firefox, esa pestaña también se abre y puedo continuar dentro de la aplicación sin tener que iniciar sesión. Sin embargo, si cierro esa pestaña, salgo de Firefox (y de nuevo digo que guarde mis pestañas), reinicio y abro una nueva pestaña, visito la página de la aplicación y luego me fuerzo para iniciar sesión. –

+1

Nunca he investigado el comportamiento de guardar para la próxima vez de FF pero parece que podría estar almacenando cookies en todas las instancias del navegador. Verifica dos veces los encabezados que estás enviando entre cada instancia de FF. No me preocuparía demasiado. Si aún tiene curiosidad, hay alguna discusión sobre las cookies en esta página que sugiere que FF puede estar almacenando todas las cookies: https://wiki.mozilla.org/Session_Restore – istruble

+0

Sí, parece que las almacena (no pude encontrar ninguna otra explicación para el comportamiento que describo en mi comentario anterior). –

1

El cambio no se aplicará a menos que ejecute manage.py syncdb nuevamente.

0

Usted tiene que limpiar las sesiones en el PP:

delete FROM django_session 
+2

Creo que no necesita 'donde 1 = 1' para eliminar todas las filas,' delete FROM django_session' es suficiente. –

4

@istruble y @haasfsafas son ambas correctas. La solución es

  1. Conjunto SESSION_EXPIRE_AT_BROWSER_CLOSE = True
  2. eliminar las filas en la tabla django_session para limpiar todas las sesiones que pueden causar confusión. (delete from django_session)
  3. Reconozca que todas las ventanas y pestañas en su navegador deben estar cerradas para que la sesión expire. Ese es el comportamiento del navegador; no el comportamiento de Django
Cuestiones relacionadas