在回调中使用错误的sessionID,但仅在一台特定计算机上使用

时间:2010-06-18 06:35:57

标签: django session callback oauth

我正在编写一个使用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)。

我尝试过的事情都无济于事:

  • 使用其他帐户登录,包括之前从未使用OAuthed的新帐户
  • 使用隐身模式清除Cookie,在同一台计算机上使用其他网络浏览器。每次检查我的cookie时,sessionID都与登录功能中的sessionID匹配,并且与回调中的sessionID不同。
  • 删除回调函数中出现的数据库中的会话(看似旧数据的会话)。回调函数仍然失败,它似乎正在使用的sessionID现在是一个新的
  • 使用不同的会话后端(DB-cache,flat file等...)
  • 重新启动服务器,我的电脑等。

    关于StackOverflow的第一个问题,如果我不完全遵循当地惯例,请耐心等待。我甚至不知道要找什么 - 有什么东西可能导致会话无法在我的特定计算机上运行,​​并且(到目前为止!)只有我的特定计算机?

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

    问题与我的电脑无关,而且是由打字的人造成的!潜意识里,我正在输入“www.our-domain.com”,我的所有同事一直在输入“our-domain.com”。我们没有Apache重写规则,因此在登录时,会话ID被设置在带有“www”的cookie中。作为域的一部分,但回调函数的重定向有一个没有“www。”的关联url,所以我的浏览器使用了两个不同的cookie,直到现在我才看到它(因为我搜索的方式)饼干还包括www!)。很简单,应该早点想到它。故事的道德:在会话中注意子域名。

  • 1 个答案:

    答案 0 :(得分:3)

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

    问题与我的电脑无关,而且是由打字的人造成的!潜意识里,我正在输入“www.our-domain.com”,我的所有同事一直在输入“our-domain.com”。我们没有Apache重写规则,因此在登录时,会话ID被设置在带有“www”的cookie中。作为域的一部分,但回调函数的重定向有一个没有“www。”的关联url,所以我的浏览器使用了两个不同的cookie,直到现在我才看到它(因为我搜索的方式)饼干还包括www!)。很简单,应该早点想到它。故事的道德:在会话中注意子域名。