2010-09-02 11 views
6

Cuando un usuario visita mi dominio, django emite un sessionid. Cuando intenta hacer Oauth con Facebook, hace clic en un botón en mi sitio que redirige a Facebook.com. Facebook redirige a mi dominio, pero en este punto, la sesión del usuario se pierde y Django parece estar emitiendo una nueva variable de sesión.Django Sessions se descarta cuando se redirige de otro dominio

Quiero que la sesión descartada persista porque debo asociar al visitante a mi sitio con su cuenta de Facebook, pero cuando se cierra la sesión, el usuario que está conectado se desconecta.

Tengo la sospecha de que este puede ser un comportamiento relacionado con la protección XSS de django. ¿Cómo hago para que la información del usuario persista cuando el usuario abandona nuestro sitio para iniciar sesión en Facebook?

+0

¿Su problema tiene algo que ver con http://docs.djangoproject.com/en/1.2/topics/http/sessions/#browser-length-sessions-vs-persistent-sessions? Además, defina que la sesión se descarta. ¿El "usuario" todavía tiene su cookie? – cpf

+0

La sesión se descarta significa que la cookie de identificación de sesión original se borra y se reemplaza por una nueva. Gracias por el enlace, parece indicar que las sesiones no deben borrarse cuando el usuario visita un sitio nuevo y regresa al dominio original. – Mark

Respuesta

9

Es posible que desee confirmar que las cookies tienen el mismo dominio cuando se crean. Eso a veces puede causar problemas. Si va al sitio web www.example.com y a los puntos de devolución de llamada OAuth a example.com, entonces es posible que tenga dos cookies separadas, una para www.example.com y otra para ejemplo.com

Encender "Preguntar siempre" en su navegador y preste atención a los detalles de la cookie. Asegúrese de que el valor para el campo "Host:" sea el mismo en ambas ocasiones.

La corrección está entrando algo así como .example.com para SESSION_COOKIE_DOMAIN en su archivo settings.py.

+0

He intentado su sugerencia y parece que el problema está resuelto, ¡gracias! – Mark

+0

Estado atascado en esto durante 2 horas x_x. Gracias por la solución! – Weaver

+2

Esto me estaba sucediendo porque estaba comenzando en 'localhost' y luego volviendo a' 127.0.0.1'. – Seth

2

También descubrí que si tiene dos aplicaciones de Django ejecutándose en el mismo dominio, para evitar una colisión de cookies, puede establecer SESSION_COOKIE_NAME de manera diferente para cada una.

Cuestiones relacionadas