设置cookie和重定向而不会出现头错误的语义

时间:2010-05-13 19:01:45

标签: php http cookies

我想在php中执行以下操作:

setcookie('name', $value, $Cookie_Expiration,'/');

then some action 

header("location:http://www.example.com")

问题是我得到: 警告:无法修改标题信息 - 已由(... etc)发送的标题

你可以告诉我我做错了什么以及是否有办法做到这一点?

顺便说一下,这个代码是在任何输出之前...... cookie设置部分可以自行工作,重定向代码也是如此......组合失败

谢谢

2 个答案:

答案 0 :(得分:2)

Cookie会在标题中发送,如果任何输出已经发送到浏览器,则无法设置标题(就在您设置Cookie时)。

最简单的解决方案,请注意,有点草率的是使用ob_start()ob_clean(),例如:

ob_start();
setcookie('name', $value, time()+3600);
ob_clean();
header("Location:http://www.example.com");

请注意位置标题中的大写字母L,这非常重要。

更好的解决方案可能是在您重定向到的页面上设置cookie,并传递信息以通过会话设置该标头。

答案 1 :(得分:0)

来自php manual:

  

setcookie()定义了一个与其他HTTP头一起发送的cookie。与其他标头一样,必须在脚本的任何输出之前发送cookie(这是协议限制)。这个    要求您在任何输出之前调用此函数,包括和标记以及任何空格。

基本上从你的警告中说出你已经知道的东西; setcookie本身正在发送标题。我可能想知道你为什么要在页面上设置cookie然后重定向,为什么不只是重定向并在URL中包含数据然后在目标页面上获取它并在那里使用数据和/或将其存储在cookie中然后,如果您已经设置了会话数据,则存储在会话数据中。