如何设置一个 Cookie,然后在 PHP 中重定向?

2022-08-30 10:53:21

在进行一些处理后,我想为用户输入设置一个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


答案 1

如果您有人工 URL 或子文件夹(如 www.domain.com/path1/path2/),则必须将 cookie 路径设置为 / 才能适用于所有路径,而不仅仅是当前路径。

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

从 PHP 手册:

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


答案 2

您如何测试是否设置了 Cookie?Cookie 在设置后在下一页上可用。

常见陷阱:

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


推荐