当从另一个域重定向时,Django会话被丢弃

时间:2010-09-02 15:25:52

标签: django oauth

当用户访问我的域时,django会发出一个sessionid。当他试图用Facebook做Oauth时,他点击我网站上的一个按钮,重定向到Facebook.com。 Facebook重定向回我的域,但此时,用户的会话丢失,Django似乎正在发布一个新的会话变量。

我希望已删除的会话持续存在,因为我必须将访问者与我的网站的Facebook帐户相关联,但是当会话被删除时,登录的用户将被注销。

我怀疑这可能是与django的XSS保护相关的行为。当用户离开我们的网站登录Facebook时,如何使用户信息持续存在?

2 个答案:

答案 0 :(得分:12)

您可能需要确认Cookie在创建时具有相同的域。这有时会引起问题。如果您要访问网站www.example.com并且OAuth回调指向example.com,那么您可能有两个单独的Cookie,一个用于www.example.com,另一个用于example.com

在浏览器上启用“始终询问”,并注意Cookie详细信息。确保“Host:”字段的值两次都相同。

此修复程序在.example.com文件中为SESSION_COOKIE_DOMAIN输入settings.py之类的内容。

答案 1 :(得分:3)

我刚刚发现,如果你有两个Django应用程序在同一个域上运行,为了避免cookie冲突你可能希望为每个应用程序设置不同的SESSION_COOKIE_NAME。