我不记得过去使用过Cookies有很多问题,但我一直在玩,并遇到了一些意想不到的结果.
(我正在运行localhost,因此我的域名设置)
$sessionCookie = rand();
setcookie("crav_auto_login_cookie", $sessionCookie, false,"/crav/", false);
echo "Cookie Set
";
echo "Cookie equals: ".$_COOKIE["crav_auto_login_cookie"]."
";
echo "should equal: ". $sessionCookie;
?>
这将产生以下输出:
饼干套装
Cookie等于:457718770
应该等于:318511886
我显然错过了一些东西,但不确定为什么值不同.是因为在页面调用时加载了cookie,而$_COOKIE [“crav_auto_login_cookie”]是从页面打开时调用的实例返回结果而不反映新设置的值?如果是这样的话,为什么呢?
解决方法:
setcookie设置标头以发送回客户端以设置cookie.在下一个请求之前,将无法在$_COOKIE阵列(包含从客户端发送的cookie)中访问新cookie.
以下是用户访问您的网页时事件的简化过程:
>用户的浏览器向您的服务器发送请求.此请求包含标头,包括为您的域为该用户设置的Cookie. PHP根据此请求中的数据填充$_COOKIE(以及$_GET,$_POST等)数组.
>服务器解析用户的请求,并设置响应.此响应以响应标头开头(包括您通过标头设置的任何标头,以及通过setcookie设置的标头).所有标题必须在任何页面输出之前(正如您可能遇到的那样,如果您在开始输出页面内容后尝试发送更多标题,PHP将给您一个错误).
>服务器发送页面内容(实际上,标题和内容是同一传输的一部分).
>服务器和客户端之间的连接关闭(为了讨论的目的,让我们忽略AJAX).
>客户端解析收到的标题和内容,根据需要设置cookie,并呈现页面(实际上,这可能很好地与接收页面串行发生).
因此,当客户端接收并处理set-cookie标头时,客户端已经完成与服务器的通信,这就是为什么在下一个请求之前cookie不会出现在PHP中.
标签:php,cookies
来源: https://codeday.me/bug/20190526/1158172.html