大家好我试图用
设置一个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次)
这对于任何想法都很烦人吗?
答案 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()调用的顺序。