为什么浏览器在第二次请求时不将上一个请求标头中的 PHPSESSID cookie 发送回服务器?

问题描述 投票:0回答:1

看来我不太了解 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 cookies session-cookies php-8
1个回答
0
投票

对于每个请求,您的代码会在设置和销毁会话之间交替

既然你说:

php -S localhost:8900 ./test.php

... 每个请求都会通过您的脚本。

因此,当您在浏览器的地址栏中输入

http://localhost:8900/
时,它会请求
/
并创建会话,然后请求
/favicon.ico
并删除 cookie。当您重新加载
/
时,它会重复。

© www.soinside.com 2019 - 2024. All rights reserved.