我如何设置一个cookie,然后在PHP中redirect?

做了一些处理后,我想设置一个cookie值给用户input,然后redirect到一个新的页面。 但是,Cookie没有设置。 如果我注释掉redirect,那么cookie设置成功。 我认为这是某种头部问题。 什么是这种情况最好的解决方法?

if($form_submitted) { ... setcookie('type_id', $new_type_id, time() + 60*60*24*30); header("Location: $url"); exit; } 

请注意,setcookie在任何情况下均返回true ,并且不会收到错误/警告/通知。

编辑:我使用的是Unix / Apache / MySQL / PHP

如果您有人类url或子文件夹(如www.domain.com/path1/path2/),则必须将Cookiepath设置为/以适用于所有path,而不仅限于当前path。

 if($form_submitted) { ... setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/'); header("Location: $url"); exit; } 

从PHP手册:

服务器上cookie的可用path。 如果设置为“/”,则Cookie将在整个域中可用。 如果设置为“/ foo /”,cookie将仅在/ foo /目录和所有子目录(如/ foo / bar / of域)中可用。 默认值是设置cookie的当前目录。

我假设你正在运行IIS? 尝试在同一个请求中设置cookie和位置标头时,IIS版本小于7的一个知道的bug。

http://support.microsoft.com/kb/q176113/

你如何testingcookie是否被设置? Cookies设置后可在下一页中find。

常见陷阱:

在下一次加载该cookie应该可见的页面之前,Cookie将不可见。 要testingcookie是否成功设置,请在cookie过期之前检查下一个加载页面上的cookie。 过期时间通过expire参数设置。 debuggingcookie的一个好方法是简单地调用print_r($ _ COOKIE);.

我能够通过在刷新标题中稍微延迟来解决这个问题。 我们设置标题(必须在可能输出的任何方法之前完成,比如setcookie),然后设置cookie。 我添加了一条消息,以便用户在几秒钟内看不到空白屏幕。

  header("refresh: 2; url=$url"); setcookie('type_id', $new_type_id, time() + 60*60*24*30, '/'); echo "Processing, please wait..."; 

在标题中使用相对URL:

 @Header("Location: orders_9090_1.php");