【发布时间】:2014-08-14 19:25:43
【问题描述】:
为什么这个 if 语句总是正确的?即使我在浏览器中禁用 cookie,它也会告诉我“cookie 已设置”。 print_r 打印空数组,但它应该说“不能设置 Cookie,请允许 cookie。”
我的代码有什么问题?
if (setcookie("Testcookie", "values of cookie", time()+3600*24)) // 1h*24 = 24hours
{
echo ("Cookie was set. ");
print_r ($_COOKIE);
} else {
echo("No Cookie could be set, please allow cookies.");
}
更新:我试过这个:
setcookie("Testcookie", "values of cookie", time()+3600*24); // 1h*24 = 24hours
if ((isset($_COOKIE)) && (!empty($_COOKIE))) { print_r($_COOKIE);} else {echo("No Cookie found.");}
这会正确设置 Cookie,但它会显示“未找到 Cookie”。重新加载后,它会找到 Cookie 并 print_r 它。为什么需要重新加载一次?我之前没有发送任何 setcookie() 调用。 Cookie 已设置,但在删除/启用 Cookie 后首次重新加载时未显示。
【问题讨论】:
-
setcookie无法知道浏览器是否会忽略 cookie(这是在浏览器中禁用 cookie 所做的);它只为响应设置适当的 cookie 标头。 -
我用这个替换了上面的代码: setcookie("Testcookie", "values of cookie", time()+3600*24); // 1h*24 = 24 小时 if ((isset($_COOKIE)) && (!empty($_COOKIE))) { print_r($_COOKIE);} else {echo("No Cookie found.");}
-
但这不适用于启用和删除 cookie 后的第一次重新加载。首次加载页面时,它会设置 cookie 并显示“未找到 cookie”。重新加载后它 print_r cookie 数组。这很奇怪,它不应该重新加载。