我正在编写一个使用 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)。
我尝试过的方法均无效:
我在 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/