0

大家好,我正在尝试使用

    setcookie("ms_il_cart_save_for_3", "cName", time()+3600);
    header("Location: store-cart3.php");
    exit;

当我搬到 store-cart3.php 时,cookie 没有设置 var dump on cookie 显示为 NULL,这对我来说已经工作了一年。今天我更新了与这段代码无关的更改,我知道到目前为止这是有效的,在这段代码之前没有输出任何 HTML,我认为我没有更改文件编码,也许我的网络服务器阻止创建 cookie,因为安全措施?(我今天已经运行了这个代码大约 100 次)

这很烦人有什么想法吗?

4

4 回答 4

1

Cookie 设置仅在尚未发送标头时才有效。如果您已经向客户端发送了标头或内容,那么 setcookie 将不起作用。设置 cookie 还需要客户端接受 cookie,如果不接受,那么除了通知他们他们需要接受 cookie 以使您的系统工作之外,您无能为力。

编辑:您在帖子中说您对不相关的代码进行了更改,现在您的 setcookie 不再起作用。您的不相关代码可能有错误,导致 PHP 向浏览器回显错误消息。这将导致发送所有标头,并且在此之后进行的任何 setcookie 调用都将不起作用。

于 2011-07-20T08:29:43.547 回答
0

在调用函数和标头之前,您可能已经输出了一些内容。

尝试在脚本开始时开始输出缓冲ob_start()

还要在文本文件的开头检查您的文件是否有警告/通知和 BOM utf-8 字节,在文本编辑器中看不到这些。

于 2011-07-20T09:04:52.950 回答
0

当您在以这种方式重定向的页面上设置 cookie 时,您必须在调用header().

所以你的例子需要是:

header("Location: store-cart3.php");
setcookie("ms_il_cart_save_for_3", "cName", time()+3600);
exit;
于 2011-07-20T08:34:28.947 回答
0

它是特定于浏览器的吗?我注意到黑莓浏览器不处理重定向响应中返回的 cookie - 但 MSIE 和 Firefox 很高兴。

由于重定向是在 setcookie 之后,我认为如果标头已经发送,那将是相当明显的。但是您是否检查过 cookie 是否仍在响应标头中?(即HTTPHeaders、firebug、tamperdata、fiddler、wireshark)

如果没有,请尝试切换 setcookie() 和 header() 调用的顺序。

于 2011-07-20T09:34:42.297 回答