看来我不太了解 PHP 和浏览器中
PHPSESSID
cookie 的处理。我不明白浏览器何时存储 cookie 并将其发回,以及浏览器何时不存储且不将其发回。我在 PHP 的本地服务器上尝试了以下代码:php -S localhost:8900 ./test.php
在第一个示例中,我在第二个请求中正确获取了 cookie。因此,在第一个请求中
print_r
打印一个空数组,在后续请求中它会打印带有会话 cookie 的数组:
<?php
print_r($_COOKIE);
if (!isset($_COOKIE['PHPSESSID'])) {
session_start();
echo "Starting a session<br/><hr/>";
}
第一次请求后:
Array ( ) Starting a session
第二次请求后:
Array ( [PHPSESSID] => 4f5eh40sjlul4ggs86evee0s73 )
但是使用下面的代码,我永远不会在服务器端代码中获得
PHPSESSID
cookie。我可以看到服务器将 cookie 发送回响应标头,如第一个示例所示,但浏览器似乎没有存储它,因此浏览器不会在第二个后续请求中将 cookie 发送到服务器:
<?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 中的会话是如何工作的,尤其是使用
PHPSESSID
cookie。
所以,我真的很想了解这部分会话处理。
对于每个请求,您的代码会在设置和销毁会话之间交替
既然你说:
php -S localhost:8900 ./test.php
... 每个请求都会通过您的脚本。
因此,当您在浏览器的地址栏中输入
http://localhost:8900/
时,它会请求 /
并创建会话,然后请求 /favicon.ico
并删除 cookie。当您重新加载 /
时,它会重复。