【发布时间】:2016-12-30 02:25:33
【问题描述】:
我在 Chrome 上遇到了 cookie 问题。 我使用 php 中的 setcookie() 函数来自动重新验证已经通过身份验证过程的用户(使用 LinkedIn API)。
问题是,我设置的 cookie 在 Firefox 和 IE 11 上运行良好,但在 Chrome 上几秒钟后似乎被删除。我已经与一群用户进行了测试,他们遇到了同样的问题(我正在等待其他浏览器的反馈)。
这是设置 cookie 的代码:
setcookie('CookieID', $var, (time()+365*24*3600), NULL, NULL, false, true);
setcookie('LinkedInAuth', $var, (time()+365*24*3600), NULL, NULL, false, true);
这是一个已知问题吗?我该如何解决这个问题?
编辑 5:
在我彻底审查了我的方法后,我更改了主题的标题。 (我还删除了以前的编辑,因为它们无关紧要)
我现在不使用 LinkedIn ID 作为我的 cookie 的值,而是使用 openssl_random_pseudo_bytes() 函数生成一个唯一 ID。
这是新代码:
$random = openssl_random_pseudo_bytes(32);
$UserKey = bin2hex($random);
$expiration= time() + 365*24*3600;
setcookie('CookieID', $UserKey, $expiration, NULL, NULL, false, false);
所以现在,Chrome 正在按照要求创建一个具有随机值的 cookie,并且 cookie 的过期时间是正确的。不过,这不是正确的值!我在控制台中回显$UserKey,它的值与cookie 不同。但在 FF 和 IE 上,它就像一个魅力!
响应标头为我的 cookie 提供了错误的值,但请求标头具有正确的值。
有人有这方面的经验吗?问题是来自我的代码还是我正在使用的功能?
【问题讨论】:
-
您是否尝试将计算放在一个单独的变量中,例如 $expire=time()+31536000?
setcookie('CookieID', $var, (time()+$expire), NULL, NULL, false, true); -
我刚试过,同样的问题。尝试使用
$expiration= time()+31536000和$expiration = 31536000 -
这个问题很简单——
$var在 PHP 中没有设置,不管你说什么。如果是,则将发送该值。你甚至想出了一个证明它的测试。唯一的另一种可能性是$var包含会破坏 cookie 解析的值,这就是为什么应该对您发送的值进行编码。 -
是的,但正如我之前所说,这个问题只发生在 Chrome 中。我在 FF 或 IE 中没有问题。
-
我刚刚尝试了一些东西,如果我将 $var 的值更改为“测试”它就可以工作。所以我之前发送的值对于chrome来说一定有问题,这是一个看起来像这样的ID:bg_h-F3Hl
标签: php google-chrome cookies setcookie