2010-09-02 1 views
6

Lorsqu'un utilisateur visite mon domaine, un ID de session est émis par django. Quand il essaie de faire Oauth avec Facebook, il clique sur un bouton de mon site qui redirige vers Facebook.com. Facebook redirige vers mon domaine, mais à ce stade, la session de l'utilisateur est perdue et Django semble émettre une nouvelle variable de session.Les sessions Django sont supprimées lorsqu'elles sont redirigées à partir d'un autre domaine

Je souhaite que la session supprimée persiste car je dois associer le visiteur à mon site avec son compte Facebook, mais lorsque la session est abandonnée, l'utilisateur connecté est déconnecté.

Je soupçonne que ce comportement peut être lié à la protection XSS de Django. Comment puis-je conserver les informations de l'utilisateur lorsque l'utilisateur quitte notre site pour se connecter à Facebook?

+0

Est-ce que votre problème a quelque chose à voir avec http://docs.djangoproject.com/fr/1.2/topics/http/sessions/#browser-length-sessions-vs-persistent-sessions? En outre, définissez la session est supprimée. L'utilisateur a-t-il toujours son cookie? – cpf

+0

La session est abandonnée signifie que le cookie d'identifiant de session d'origine est effacé et remplacé par un nouveau. Merci pour le lien, il semble indiquer que les sessions ne doivent pas être effacées lorsque l'utilisateur visite un nouveau site et retourne au domaine d'origine. – Mark

Répondre

9

Vous souhaiterez peut-être confirmer que les cookies ont le même domaine lors de leur création. Cela peut parfois causer des problèmes. Si vous allez sur le site www.example.com et les rappels OAuth sur example.com, il est possible que vous ayez deux cookies séparés, un pour www.example.com et un pour exemple.com

Activer "Toujours demander" sur votre navigateur et faites attention aux détails des cookies. Assurez-vous que la valeur du champ "Host:" est identique deux fois.

Le correctif entre quelque chose comme .example.com pour SESSION_COOKIE_DOMAIN dans votre fichier settings.py.

+0

J'ai essayé votre suggestion et il semble que le problème soit résolu, merci! – Mark

+0

Été bloqué sur cela pour comme 2 heures x_x. Merci pour la solution! – Weaver

+2

Cela m'était arrivé parce que je commençais sur 'localhost' et que je revenais sur' 127.0.0.1'. – Seth

2

Je viens également de découvrir que si deux applications Django s'exécutent sur le même domaine, pour éviter la collision de cookies, vous pouvez définir SESSION_COOKIE_NAME différemment pour chacune d'elles.