在做了一些处理之后,我想为用户输入设置一个cookie值,然后将它们重定向到一个新页面。但是,cookie没有设置。如果我注解掉重定向,则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
6条答案
按热度按时间lf3rwulv1#
如果你有人类可读的url或子文件夹(如www.domain.com/path1/path2/),那么你必须将cookie path设置为/,以适用于所有路径,而不仅仅是当前路径。
来自PHP手册:
Cookie所在的服务器路径。如果设置为“/”,则Cookie在整个域中都可用。如果设置为“/foo/”,则Cookie仅在域的/foo/目录和所有子目录(如/foo/bar/)中可用。默认值是设置Cookie的当前目录。
djp7away2#
您如何测试Cookie是否已设置?Cookie在设置后可在 next 页面上使用。
常见缺陷:
在下一次加载cookie应该可见的页面之前,cookie不会变为可见。要测试cookie是否设置成功,请在cookie过期之前检查下一个加载页面上的cookie。过期时间通过expire参数设置。调试cookie存在的一个好方法是简单地调用print_r($_COOKIE);。
holgip5t3#
我假设您运行的是IIS?当尝试在同一请求中同时设置cookie和位置标头时,IIS版本低于7时有一个已知的错误。
http://support.microsoft.com/kb/q176113/
qncylg1j4#
我可以通过在刷新头中使用一个轻微的延迟来解决这个问题。我们设置了头(必须在任何可能输出的方法之前完成,比如setcookie),然后设置cookie。我添加了一条消息,这样用户就不会在那几秒钟内看到空白屏幕。
hc2pp10m5#
在标头中使用相对URL:
guz6ccqo6#
我已经解决了这个问题