【问题标题】:Cookie won't take correct value on chromeCookie 不会在 chrome 上取正确的值
【发布时间】: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


【解决方案1】:

以下代码适用于我在 Chrome 版本 52 上。某事在 Linux 上:

$var = '1234567890';
setcookie('CookieID', 'CK'.$var, (time()+365*24*3600), NULL, NULL, false, true);
echo 'Cookie "CookieID" should be set to "CK'.$var.'"';
exit;

结果如下:

我只能假设您没有正确设置$var,或者在渲染页面之前没有设置$varsetcookie() 是一个header 函数,必须在渲染页面之前调用)。

你在做和上面的代码不同的事情吗?

【讨论】:

  • $var= 'SomeString'; /*SET COOKIE*/ $expiration= time() + 365*24*3600; setcookie('CookieID', $var, $expiration, NULL, NULL, false, false); /************/ 这是我的代码。我和你一样认为我设置了 $var 错误,但由于它适用于 FF 和 IE,甚至在 Chrome 上我得到输出 $var 的值,我不明白为什么当我设置 cookie 时它不应该工作。
  • 您是否在 Chrome 中运行任何扩展程序?也许您在 Incognito 模式下运行 Chrome?在设置 -> 高级 -> 隐私 -> 内容设置 -> Cookies 下您是否设置了任何“例外”?
  • 没有例外,没有隐身。我正在运行对 montior cookie 的扩展,但我删除了它。其实有一点我想到的。我从 CURL HTTP 请求中获取 $var 的值,该请求在我设置 cookie 之前被调用并关闭。我之前没有费心去研究这个,因为它可以在其他浏览器上运行,但是由于问题似乎来自我给 $var 的值,也许 Chrome 正在以导致问题的方式处理请求?此外,如果我查看请求标头,Cookie 值是正确的。它们在响应标头中显示为已删除。
  • 古怪的想法,使用Javascript(在window.onload)设置cookie,看看会发生什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-11-08
  • 1970-01-01
  • 2017-01-06
  • 2012-05-23
  • 2022-01-12
  • 2013-05-28
相关资源
最近更新 更多