我正在编写一个使用OAuth的Python / Django Web应用程序(对于TwitterAPI,而不是它应该重要)。
我正在我的登录功能中存储会话ID,然后在使用OAuth获取用户的令牌后,我尝试在回调函数中检索sessionID。然后回调函数总是失败(抛出异常),因为它无法在会话中找到OAuth令牌。通过调试器,我能够确定服务器正在使用的会话ID不正确 - 它与登录功能中存储的会话ID不匹配。因此,Oauth令牌不存在并不令人惊讶。回调中出现的会话每次都是相同的(直到我尝试删除它 - 请参阅“我在下面尝试过的事情”),并且它最初是一个旧会话,其中一些数据来自不同的django应用程序在几周内没有碰过的同一台服务器上运行。
以下是踢球者:我描述的所有内容仅在我们的生产服务器上存在问题,并且仅在从我的计算机连接到它时才会出现问题。让我澄清一下:这只发生在我特定的笔记本电脑上。我可以从别人的电脑上连接到应用程序。其他人无法在我的计算机上与他们的帐户建立联系。此外,当使用内置的django webserver在我的localhost上运行时,我可以很好地连接到应用程序,而不是生产服务器。
我的设置:我的服务器和本地盒正在运行= Django 1.2.0和Python 2.6.5。我的本地方框运行Snow Leopard和Django网络服务器,服务器正在运行Ubuntu,Apache2和mod-wsgi。对于会话,我使用的是Django的默认会话后端(DB)。
我尝试过的事情都无济于事:
关于StackOverflow的第一个问题,如果我不完全遵循当地惯例,请耐心等待。我甚至不知道要找什么 - 有什么东西可能导致会话无法在我的特定计算机上运行,并且(到目前为止!)只有我的特定计算机?
编辑:在发布这个问题几个小时后解决了这个问题,经过几天的努力奋斗了几天!问题与我的电脑无关,而且是由打字的人造成的!潜意识里,我正在输入“www.our-domain.com”,我的所有同事一直在输入“our-domain.com”。我们没有Apache重写规则,因此在登录时,会话ID被设置在带有“www”的cookie中。作为域的一部分,但回调函数的重定向有一个没有“www。”的关联url,所以我的浏览器使用了两个不同的cookie,直到现在我才看到它(因为我搜索的方式)饼干还包括www!)。很简单,应该早点想到它。故事的道德:在会话中注意子域名。
答案 0 :(得分:3)
在发布这个问题几个小时之后解决了这个问题,经过几天的努力奋斗了几天!
问题与我的电脑无关,而且是由打字的人造成的!潜意识里,我正在输入“www.our-domain.com”,我的所有同事一直在输入“our-domain.com”。我们没有Apache重写规则,因此在登录时,会话ID被设置在带有“www”的cookie中。作为域的一部分,但回调函数的重定向有一个没有“www。”的关联url,所以我的浏览器使用了两个不同的cookie,直到现在我才看到它(因为我搜索的方式)饼干还包括www!)。很简单,应该早点想到它。故事的道德:在会话中注意子域名。