在移动 Safari 中重定向后 Cookie 未定义

Cookie is undefined after redirect in mobile Safari

我有一些代码设置了一个 $userid cookie,然后重定向如下:

$userid = $_GET['userid'];
setcookie('userid',$userid,time() + (864000 * 7), '/');

header("Location: https://coinbase.com/oauth/authorize?response_type=code&client_id=$clientid&redirect_uri=$redirecturi");

这很好用。如果我在设置后回显 $_COOKIE['userid'],它会显示用户标识。到目前为止,一切都很好。

重定向到 Coinbase OAuth 页面,用户必须在该页面上登录并允许我的网站访问他们的钱包。处理完成后,Coinbase 将用户重定向到 $redirecturi,该页面与设置的 cookie 代码所在的页面相同。

然后我使用 $_COOKIE['userid'] 来确定哪个用户通过了身份验证过程并存储我从 Coinbase 收到的数据。另外,我确实检查了是否设置了 $_GET['code'],所以代码的两部分是分开的(我不是不小心再次将 $_GET['userid'] 设置为 cookie)。

示例网址:

脚本位置:http://example.com/dev/startcoinbase.php?userid=abcdef

URL 用户:http://example.com/dev/startcoinbase.php?userid=abcdef

从 Coinbase 重定向:http://example.com/dev/startcoinbase.php?code=code

真正奇怪的是,当 运行 从 iOS 应用程序的 UIwebview 中,Chrome 和桌面上的 FF 时,我的代码工作正常,但不是移动版 Safari 浏览器(即使在应用程序中 webviews 使用相同的引擎?!)。

如有任何帮助,我们将不胜感激!

域和协议 http / https 相同吗? http://example.comhttps://example.com 的 Cookie 可能不同。

还要注意子域,可能 sub.example.com cookie 在 example.com 上不可见。

你应该检查一下(我想你做过,但如果没有,那就去做),如果你在 Safari 中启用了 cookie :)