【发布时间】:2014-03-31 12:42:21
【问题描述】:
我使用的是 CakePHP 2.4。我的网站上有一个OAuth signin。 %99.5 的登录成功,但 %0.5 失败。我有这个错误好几个月了。我尝试了很多东西来调试和记录,但我仍然没有解决问题。尽管大多数请求都很好,但我需要解决一小部分。
场景是这样的:
- 用户点击登录按钮
- 我从服务器获取请求令牌(例如 yahoo、twitter)
- 我在用户会话中保存
oauth_token
例如会话 ID 是aaa1234 CakePHP 创建 PHPSESSID cookie 并将会话 ID 保存在该 cookie 中。
我将用户重定向到 Twitter 服务器并且用户确认我的应用程序
- 用户使用 oauth 验证器访问我的网站
a) 我使用用户的oauth_token和oauth_verifier并得到access_tokens。会话 ID 是aaa1234。一切都很好。
b) 失败。因为我在当前会话中找不到用户的oauth_token。当我检查会话 ID 时,我看到 ID 已更改,现在 ID 为bbb2345
对于场景 b:
似乎用户现在有新的会话 ID。在新会话中找不到oauth_token。但请注意,旧会话数据存在于/tmp/sessions/ 文件夹中。
会话 aaa1234 的会话 ID cookie 不存在。但是我 2 天前设置的另一个跟踪 cookie 存在于 cookie 中。
我检查用户代理。
用户第一次来,用户从雅虎服务器回来也是一样。
这种故障场景发生在Chrome、Firefox、移动浏览器或其他浏览器中,所以我无法指责浏览器类型。
我应该检查什么来诊断?
我的 CakePHP core.php 设置:
Configure::write('Session', array( 'defaults' => 'cake' ));
Configure::write('Session.cookie', 'MYPHPSESSID');
Configure::write('Session.timeout', 120);
Configure::write('Security.level', 'medium');
文件中提到的其他设置是默认设置: https://github.com/cakephp/cakephp/blob/2.5/app/Config/core.php#L182
编辑:通过使用this answer,我检查了cookie。 20% 的错误用户禁用了 cookie。我亲自询问并且用户确认了 cookie 选项。但似乎其他用户没有禁用 cookie。还有一些用户使用 Android WebViews 访问我的网站。在 WebView 客户端中,我确定我没有禁用 cookie。 99%的WebView用户也能成功使用网站。
【问题讨论】:
-
看来您的会话 ID 没有正确传递回服务器。可能发生如果第一次设置会话 cookie 以响应立即重定向到其他地方的请求。
-
很抱歉我听不懂。如果会话 cookie 是第一次设置,那么它会做什么?
-
一个问题,您是通过 dialogPopUp 窗口还是普通窗口请求请求令牌?
-
@AbdouTahiri 不是对话。我将用户重定向到 Yahoo 或 Twitter 授权页面,用户离开了我的网站。当用户授权他回到我的网站。
-
我的意思是雅虎登录页面出现在当前浏览器窗口或单独的弹出窗口中?
标签: php session cakephp cookies session-cookies