【发布时间】:2013-04-23 17:01:37
【问题描述】:
今天出现这个问题,好像和webkit有关。
在通过位置 [301/302] HTTP 标头(在这种情况下为 404 错误页面)重定向的页面上,PHP 无法读取 cookie - 这意味着 $_COOKIE 是一个空数组。
我知道在同一响应中使用 Set-Cookie 和 Location 标头会中断的 webkit 错误,但这是关于读取而不是写入,因此它应该位于请求标头中。
我使用的是最新的 Chrome v26。在后端,我的家庭服务器上有 PHP 5.3.10-1ubuntu3.6,在生产服务器上完全相同(我没有设置,也不是默认设置)。在生产服务器上,我无法像之前所说的那样读取 cookie,但在我的家庭/开发服务器上我可以。
而且情况变得更糟:在另一台运行 PHP 5.3.3-7+squeeze14 的服务器上,如果 Content-Type 标头不是 html,而是 text/plain,我也无法读取 cookie。
我通过以下方式设置 cookie:
if (setcookie($name, $value, $expire, $path, null, isset($_SERVER['HTTPS']), $httponly))
{
$_COOKIE[$name] = $value;
return true;
}
return false;
- $httponly 是假的
- $path 是'/'
- 名称由小写字母组成
- 值由数字和破折号组成
我可以在“开发者工具”/“资源”选项卡中看到 cookie,它在简单的 html 页面上运行良好。
感谢您的帮助。 谢谢。
【问题讨论】:
-
快速的解决方法是不保存新的空会话。但问题仍然存在。
-
我们能看到实际的 setcookie 调用(即所有值)吗?
-
setcookie('lwcsessid', '1367271447-42780100-18814-62545', null, '/', null, isset($_SERVER['HTTPS']), false);正如我所说,cookie 已设置并且可以在不重定向的页面上读取。我还尝试指定过期日期,而不是将其留给浏览器。
标签: php google-chrome cookies