Php 设置cookie和重定向而不获取标头错误的语义

Php 设置cookie和重定向而不获取标头错误的语义,php,http,cookies,Php,Http,Cookies,我想在php中执行以下操作: setcookie('name', $value, $Cookie_Expiration,'/'); then some action header("location:http://www.example.com") 问题是我得到了: 警告:无法修改标题信息-标题已由(…etc)发送 你能告诉我我做错了什么,如果有办法的话 顺便说一句,这段代码是在任何输出之前完成的……cookie设置部分本身工作正常,重定向代码也工作正常……组合失败 谢谢您来自 setc

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

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

then some action 

header("location:http://www.example.com")
问题是我得到了: 警告:无法修改标题信息-标题已由(…etc)发送

你能告诉我我做错了什么,如果有办法的话

顺便说一句,这段代码是在任何输出之前完成的……cookie设置部分本身工作正常,重定向代码也工作正常……组合失败

谢谢您

来自

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


基本上说,你已经知道从你的警告;setcookie本身正在发送头。我可能想知道,为什么要在页面上设置cookie,然后重定向,为什么不直接重定向并将数据包含在URL中,然后在目标页面上拾取数据并使用该数据和/或将其存储在cookie中,或者如果已经设置了会话,则将其存储在会话数据中。

cookie在标题中发送,如果任何输出已经发送到浏览器(即设置cookie时),则不能设置标题

请注意,最简单的解决方案是使用和,例如:

ob_start();
setcookie('name', $value, time()+3600);
ob_clean();
header("Location:http://www.example.com");
请注意位置标题中的大写L,这非常重要


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

在错误中,它应该告诉您添加输出的确切行。一般来说,这没有错。您应该在错误指示输出开始的代码行中发布。很抱歉…错误指向设置cookie的代码行。因此,如果您仅取消对setcookie行的注释,重定向仍然有效?是的,确实有效,反之亦然。如果我对标题行进行注释,cookies就会被设置,你能发布一个更完整的php文件版本吗?