提问人:LeoRado 提问时间:10/19/2023 更新时间:10/19/2023 访问量:50
为什么浏览器在第二个请求时不将 PHPSESSID cookie 从前一个请求标头发送回服务器?
Why doesn't the browser send the PHPSESSID cookie from the previous request header back to the server on a second request?
问:
似乎我不太了解 PHP 和浏览器中 cookie 的处理。我不明白浏览器何时存储 cookie 并将其发送回去,以及浏览器何时不存储并且不将其发送回去。我尝试了PHP的本地服务器的以下代码:PHPSESSID
php -S localhost:8900 ./test.php
在第一个示例中,我在第二个请求中正确获取了 cookie。因此,在第一个请求中打印一个空数组,在后续请求中,它打印带有会话 cookie 的数组:print_r
<?php
print_r($_COOKIE);
if (!isset($_COOKIE['PHPSESSID'])) {
session_start();
echo "Starting a session<br/><hr/>";
}
在第一次请求之后:Array ( ) Starting a session
在第二个请求之后:Array ( [PHPSESSID] => 4f5eh40sjlul4ggs86evee0s73 )
但是使用以下代码,我永远不会在服务器端代码中获得 cookie。我可以看到服务器在响应标头中发送回 cookie,如第一个示例所示,但浏览器似乎没有存储它,因此浏览器不会在第二个后续请求中将 cookie 发送到服务器:PHPSESSID
<?php
print_r($_COOKIE);
if (!isset($_COOKIE['PHPSESSID'])) {
session_start();
echo "Starting a session<br/><hr/>";
}
else {
echo "Destroying a session<br/>";
setcookie('PHPSESSID', '', time() - 3600);
}
问题是我正在一个大的PHP BE上处理会话,我试图弄清楚PHP中的会话是如何工作的,尤其是使用cookie。PHPSESSID
所以,我真的很想了解会话处理的这一部分。
答:
2赞
Quentin
10/19/2023
#1
对于每个请求,您的代码在设置和销毁会话之间交替进行
既然你说:
php -S localhost:8900 ./test.php
...每个请求都会通过您的脚本。
因此,当您在浏览器的地址栏中输入内容时,它会请求并创建会话,然后请求并删除 cookie。当您重新加载时,它会重复。http://localhost:8900/
/
/favicon.ico
/
评论
0赞
LeoRado
10/19/2023
啊,我对会话处理感到非常困惑,以至于我忽略了它。我的错! 请求刚刚奏效。谢谢你@Quentin!php -S localhost:8900
localhost:8900/test.php
评论
session_start
PHPSESSID
session_start