2011-07-20 91 views
0

嗨,大家好我试着去设置使用setCookie方法不设置cookie

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

当我移动到存储-cart3.php cookie的一个cookie未设置VAR转储上的cookie显示NULL,这有工作到目前为止我已经有一年了。今天我已经更新了与这段代码无关的更改,我知道这是迄今为止工作的一个事实,在此代码之前没有任何东西与HTML输出,我不认为我更改了文件编码,也许我的Web服务器块创建了Cookie,因为安全策略? (我今天运行这个代码大约100次)

这是pritty讨厌任何想法?

+0

我也清除了cookie的缓存很多次 – Jacki

+0

当你做'echo setcookie(“ms_il_cart_save_for_3”,“cName”,time()+ 3600);退出;'什么显示在屏幕上?它打印真假吗? – Femi

回答

1

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

编辑:你在你的文章中说过你对不相关的代码做了修改,现在你的setcookie不再工作了。有可能你的不相关的代码有一个错误,导致PHP向浏览器回送错误消息。这将导致所有头文件被发送,并且在此点之后所做的任何setcookie调用都不起作用。

+2

除上述之外:以上情况的非常典型的情况是youe php代码的某些部分正在生成警告消息,这基本上意味着在此之后您不能再发送任何头文件了。 – rasjani

+0

是的,好点。 – GordonM

0

当您在以这种方式重定向的页面上设置cookie时,必须在呼叫header()后设置cookie。

所以,你的例子就需要被:

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

Propably你调用一个函数和头已经发送之前outpuded一些内容。

尝试通过ob_start()

在你的脚本开始启动输出缓冲以文本文件的begining还要检查你的文件警告/通知和BOM UTF-8字节,那些至极不会出现在文本编辑器。

0

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

因为重定向是在setcookie之后的,所以我认为如果头文件已经被发送了,那就相当明显了。但是你有没有检查到cookie仍然在响应头文件中? (ieHTTPHeaders,firebug,tamperdata,fiddler,wireshark)

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