2

今天出现了这个问题,似乎和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 是假的
  • $路径是'/'
  • 名称由小写字母组成
  • 该值由数字和破折号组成

我可以在开发人员工具/资源选项卡中看到 cookie,它在简单的 html 页面上运行良好。

我很感激任何帮助。谢谢。

4

2 回答 2

0

重定向页面和重定向页面在同一个域中?也许这可以被认为是 XSS 窃取 cookie 的尝试。尝试发送“Access-Control-Allow-Origin:*”标头:

header("Access-Control-Allow-Origin: *" );
于 2013-04-29T22:09:54.817 回答
0

在我的情况下,问题在于session_set_cookie_params(),域的参数(第三个参数)以句点为前缀.,例如“.localhost”。当我删除 时.,填充了 $_COOKIE 变量。

于 2020-04-04T19:51:22.977 回答