【问题标题】:Django Sessions getting dropped when redirected from another domain从另一个域重定向时,Django 会话被丢弃
【发布时间】:2014-04-01 02:57:23
【问题描述】:

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

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

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

【问题讨论】:

  • 您的问题与docs.djangoproject.com/en/1.2/topics/http/sessions/… 有关系吗?此外,定义会话被丢弃。 “用户”还有它的 cookie 吗?
  • 会话被丢弃意味着原来的会话 id cookie 被删除并被一个新的替换。感谢您的链接,似乎表明当用户访问新站点并返回原始域时不应删除会话。

标签: django oauth


【解决方案1】:

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

在您的浏览器上打开“始终询问”并注意 cookie 的详细信息。确保两次“主机:”字段的值相同。

修复方法是在您的settings.py 文件中为SESSION_COOKIE_DOMAIN 输入类似.example.com 的内容。

【讨论】:

  • 我试过你的建议,看来问题已经解决了,谢谢!
  • 被困在这个问题上大约 2 小时 x_x。感谢您的解决方案!
  • 这件事发生在我身上,因为我从localhost 开始,然后又回到127.0.0.1
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2018-09-03
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-26
    • 1970-01-01
    相关资源
    最近更新 更多