我不记得过去使用过Cookies有很多问题,但我一直在玩,并遇到了一些意想不到的结果。
(我在localhost上运行,因此我的域设置)
<?php
$sessionCookie = rand();
setcookie("crav_auto_login_cookie", $sessionCookie, false,"/crav/", false);
echo "Cookie Set<br/>";
echo "Cookie equals: ".$_COOKIE["crav_auto_login_cookie"]."<br/>";
echo "should equal: ". $sessionCookie;
?>
这将在以下输出中产生:
Cookie Set
Cookie equals: 457718770
should equal: 318511886
我显然遗漏了一些东西,但不确定为什么值不同。是因为cookie是在页面调用时加载的,$_COOKIE["crav_auto_login_cookie"]
是从页面打开时调用的实例返回结果而不反映新设置的值?如果是这样的话,为什么呢?
答案 0 :(得分:5)
setcookie
设置标头以发送回客户端以设置Cookie。在下一个请求之前,$_COOKIE
数组(其中包含从客户端发送的发送)中的新Cookie无法访问。
以下是用户访问您网页时事件的简化过程:
$_COOKIE
(以及$_GET
,$_POST
等)数组。header
自行设置的所有标头,以及通过setcookie
设置的Cookie标头)。所有标题必须在任何页面输出之前(正如您可能遇到的那样,如果您在开始输出页面内容后尝试发送更多标题,PHP将给您一个错误。)因此,当客户端接收并处理set-cookie标头时,客户端已经完成了与服务器的通信,这就是为什么在下一次请求之前cookie不会出现在PHP中。
答案 1 :(得分:1)
来自“常见陷阱”下的PHP.net's setcookie documentation:
直到明天才会看到Cookie 下一页加载的页面 cookie应该是可见的。去测试 如果成功设置了cookie, 在下次加载时检查cookie Cookie过期前的页面。
答案 2 :(得分:1)
你可以直接覆盖超全球。
$ sessionCookie = rand();
setcookie(“crav_auto_login_cookie”,$ sessionCookie,false,“/ crav /”,false); $ _COOKIE [“crav_auto_login_cookie”] = $ sessionCookie;
echo“Cookie Set”;
echo“Cookie equals:”。$ _ COOKIE [“crav_auto_login_cookie”];
echo“应该相等:”。 $ sessionCookie;