【问题标题】:Session lost after first Twitter OAuth request第一次 Twitter OAuth 请求后会话丢失
【发布时间】:2011-07-12 21:44:14
【问题描述】:

使用 ASP.NET MVC,会话存储在 SQL 数据库中(从来没有遇到过问题,也没有使用网络场)。也使用 Twitterizer2 库。使用火狐。

  1. 第一个请求,没有打开浏览器实例。浏览器实例已启动。
  2. 我们有简单的表单“在 twitter 上发布”和提交按钮分享。
  3. 单击“共享”时,我们将消息存储在 Session 中并重定向到 Twitter 的 OAuth 身份验证(在 POST 提交时)。
  4. 我们验证成功并返回到我们的操作,在发布到 Twitter 之前,我们检查消息是否存储在 Session 中(它不是!- Twitter 重定向后它立即丢失)
  5. 当我们尝试另一条消息分享时,它现在正在工作(会话)。
  6. 我们使用 Cookie 解决了这个问题,但在从 Twitter 返回后丢失 Session(第一次)时我们没有任何线索。

任何死亡?

【问题讨论】:

  • 你能看一下 FireBug 步骤 4。当从 Twitter 返回时,请求标头中发送的 AspNet_SessionId cookie?

标签: c# model-view-controller session twitter oauth


【解决方案1】:

我想问一下你第一次没有cookie是如何保持会话的?

我认为问题可能出在 cookie 设置过程上。几周前我也遇到了类似的问题。

问题是当我请求 REQUEST 令牌时,这个请求是内部 HTTP 请求(不是通过用户浏览器)。作为对此请求的响应,我得到 REQUEST 令牌,然后在用户会话中设置它。

$token = getRequestToken();
$_SESSION['token'] = $token;

但是,如果用户在没有会话的情况下首次访问我的站点,则他没有会话 cookie 可以发送给我。在网站内部,我为他创建了一个会话,并将令牌存储在其中,但是我没有向他发送包含 cookie 标头的响应,以便他“接受”我的会话,而是重定向到提供者授权端点。这样用户就不会得到会话cookie,当他返回时,他就像我网站的新用户一样。

这是发生在我身上的流程:

  1. 在数据库中创建用户会话
  2. setcookie(usersession) // 为最终响应添加标头
  3. 获取请求令牌
  4. 在会话中设置令牌
  5. 重定向用户(用户没有收到会话cookie)
  6. 用户进入授权点
  7. 用户返回,但他是我的新用户

我很想知道您是否有类似的问题 :) 最好的问候

【讨论】:

    【解决方案2】:

    检查请求和回调域是否相同

    即您正在从 localhost 请求 oauth 并回调到 127.0.0.1

    【讨论】:

      猜你喜欢
      • 2014-11-06
      • 1970-01-01
      • 2017-01-13
      • 1970-01-01
      • 2014-03-31
      • 2015-02-23
      • 2018-01-04
      • 1970-01-01
      • 2014-12-29
      相关资源
      最近更新 更多