Setcookie没有设置cookie

时间:2011-07-20 03:18:27

标签: php cookies header setcookie

大家好我试图用

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

当我转移到store-cart3.php时,cookie没有设置,var上的转储显示为NULL,这对我来说已经有一年了。今天我已经更新了与这段代码无关的更改,我知道这个工作到目前为止,在此代码之前没有任何HTML输出,我不认为我改变了文件编码,也许我的web服务器块创建cookie因为安全问题? (我今天运行此代码大约100次)

这对于任何想法都很烦人吗?

4 个答案:

答案 0 :(得分:1)

Cookie设置仅在尚未发送标头时才有效。如果您已经向客户端发送了标题或内容,那么setcookie将无效。设置cookie还要求客户端接受cookie,如果没有,那么除了告知他们需要接受cookie以使系统工作之外,您无法做任何事情。

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

答案 1 :(得分:0)

如果您在以这种方式重定向的网页上设置Cookie,则必须在调用header()后设置Cookie。

所以你的例子必须是:

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

答案 2 :(得分:0)

在调用函数和标题已经发送之前,你可能已经超出了一些内容。

尝试在ob_start()

的脚本开始时启动输出缓冲

同时检查文件中的警告/通知以及文本文件开头的BOM utf-8字节,文本编辑器中没有。

答案 3 :(得分:0)

是浏览器特定的吗?我注意到Blackberry浏览器不处理重定向响应中返回的cookie - 但是MSIE和Firefox很乐意。

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

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