django - 回调中使用了错误的 sessionID,但仅限于一台特定计算机

标签 django session callback oauth

我正在编写一个使用 OAuth 的 Python/Django Web 应用程序(对于 TwitterAPI,这并不重要)。

我在登录函数中存储 session ID,然后在使用 OAuth 获取用户 token 后,尝试在回调函数中检索 session ID。然后回调函数总是失败(抛出异常),因为它在 session 中找不到 OAuth token 。通过调试器,我能够确定服务器使用的 session ID 不正确 - 它与登录函数中存储的 session ID 不匹配。因此,Oauth token 不存在也就不足为奇了。回调中出现的 session 每次都是相同的(直到我尝试删除它 - 请参阅“下面我尝试过的事情”),并且它一开始是一个旧 session ,其中包含一些来自不同的数据django 应用程序在我几周没有碰过的同一台服务器上运行。

这里有一个关键点:我所描述的所有内容都仅在我们的生产服务器上存在,并且仅在从我的计算机连接到它时存在。让我澄清一下:这只发生在我的特定笔记本电脑上。我可以从别人的计算机上正常连接到该应用程序。其他人无法连​​接他们在我的计算机上的帐户。此外,当应用程序使用内置的 django Web 服务器在我的本地主机上运行时,我可以很好地连接到该应用程序,但不能连接到生产服务器。

我的设置:我的服务器和本地机器正在运行= Django 1.2.0 和 Python 2.6.5。我的本地机器正在运行 Snow Leopard 和 Django Web 服务器,该服务器正在运行 Ubuntu、Apache2 和 mod-wsgi。对于 session ,我使用 Django 的默认 session 后端 (DB)。

我尝试过的方法均无效:

  • 使用其他帐户登录,包括以前从未通过 OAuth 访问此应用的新帐户
  • 清除cookie、使用隐身模式、在同一台计算机上使用不同的网络浏览器。每次,在检查我的 cookie 时,sessionID 都与登录函数中的 sessionID 匹配,但与回调中的 sessionID 不同。
  • 删除回调函数中出现的数据库中的 session (看起来是旧数据的 session )。回调函数仍然失败,并且它似乎使用的 sessionID 现在是一个新的
  • 使用不同的 session 后端(数据库缓存、平面文件等...)
  • 重新启动服务器、我的计算机等

    我在 StackOverflow 上的第一个问题,如果我不太遵循本地惯例,请耐心等待。我只是不知道要寻找什么 - 哪些因素可能导致 session 无法在我的特定计算机上运行,​​并且(到目前为止!)只有我的特定计算机?

    编辑:解决了它,在发布这个问题几个小时后,在与这个问题斗争了几天之后!

    这个问题与我的电脑无关,而是由在电脑上打字的人造成的!我下意识地输入了“www.our-domain.com”,而我所有的同事一直在输入“our-domain.com”。我们没有适当的 Apache 重写规则,因此在登录时, session ID 被设置在带有“www”的 cookie 中。作为域的一部分,但回调函数的重定向有一个不带“www”的关联网址,因此我的浏览器使用了两个不同的 cookie,不知何故直到现在我才看到(因为我搜索的方式) cookie 还包括 www!)。很简单,应该早点想到的。这个故事的寓意是:要小心 session 中的子域。

  • 最佳答案

    解决了,在发布这个问题几个小时后,经过几天的努力!

    这个问题与我的电脑无关,而是由在电脑上打字的人造成的!我下意识地输入了“www.our-domain.com”,而我所有的同事一直在输入“our-domain.com”。我们没有适当的 Apache 重写规则,因此在登录时, session ID 被设置在带有“www”的 cookie 中。作为域的一部分,但回调函数的重定向有一个不带“www”的关联网址,因此我的浏览器使用了两个不同的 cookie,不知何故直到现在我才看到(因为我搜索的方式) cookie 还包括 www!)。很简单,应该早点想到的。这个故事的寓意是:要小心 session 中的子域。

    关于django - 回调中使用了错误的 sessionID,但仅限于一台特定计算机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3067647/

    相关文章:

    django - 如何使用 Django 对 Redis 进行故障转移

    node.js - Express.js req.session 在路由中未定义

    使用类成员的 C++ 回调

    javascript - Node JS 与 node-cmd : wait until execution of prior cmd call is finished

    javascript - 如何在回调中访问正确的“this”?

    Python django 无法导入名称 View

    Python多处理池卡在ubuntu服务器上

    django - 保存后不立即更新多对多关系的问题

    Django:TemplateSyntaxError:无法解析余数

    javascript - 提交表单后 session 丢失 - php