我想在php中执行以下操作:
setcookie('name', $value, $Cookie_Expiration,'/');
then some action
header("location:http://www.example.com")
问题是我得到: 警告:无法修改标题信息 - 已由(... etc)发送的标题
你可以告诉我我做错了什么以及是否有办法做到这一点?顺便说一下,这个代码是在任何输出之前...... cookie设置部分可以自行工作,重定向代码也是如此......组合失败
谢谢
答案 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)
setcookie()定义了一个与其他HTTP头一起发送的cookie。与其他标头一样,必须在脚本的任何输出之前发送cookie(这是协议限制)。这个 要求您在任何输出之前调用此函数,包括和标记以及任何空格。
基本上从你的警告中说出你已经知道的东西; setcookie本身正在发送标题。我可能想知道你为什么要在页面上设置cookie然后重定向,为什么不只是重定向并在URL中包含数据然后在目标页面上获取它并在那里使用数据和/或将其存储在cookie中然后,如果您已经设置了会话数据,则存储在会话数据中。