我不记得过去使用过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;
?>
Run Code Online (Sandbox Code Playgroud)
这将产生以下输出:
Cookie Set
Cookie equals: 457718770
should equal: 318511886
我显然错过了一些东西,但不确定为什么值不同.是因为cookie是在页面调用时加载的,并且$_COOKIE["crav_auto_login_cookie"]正在从打开页面时调用的实例返回结果而不反映新设置的值?如果是这样的话,为什么呢?
setcookie设置标头以发送回客户端以设置cookie.在下一个请求之前,新的cookie将无法在$_COOKIE阵列中访问(包含从客户端发送的cookie ).
以下是用户访问您的网页时事件的简化过程:
$_COOKIE(以及$_GET,$_POST基于在此请求中的数据,等等)阵列.header,以及设置的标头setcookie).所有标题必须在任何页面输出之前(正如您可能遇到的那样,如果您在开始输出页面内容后尝试发送更多标题,PHP将给您一个错误).因此,当客户端接收并处理set-cookie标头时,客户端已经完成与服务器的通信,这就是为什么在下一个请求之前cookie不会出现在PHP中.