我有一台运行 PHP 7.4.3(Apache 2.4.41 + mod_php)的 Ubuntu 20.04 服务器,据我所知,一切都应该处于默认状态。但 PHP 会话似乎不起作用。运行以下代码时,每次刷新网页都会导致相同的输出(而不是递增)并导致新的会话文件/var/lib/php/sessions
:
?php
session_start();
$_SESSION['test'] += 1;
var_dump($_SESSION['test']);
我使用不同的浏览器(以排除我的浏览器拒绝会话 cookie 的可能性)和操作系统进行了检查,问题始终存在。我在装有 PHP 5.3 的旧 CentOS 上运行了相同的代码 - 没有问题。无论使用哪种浏览器,计数器都会在每次浏览器刷新后递增,并且会话会随着每次请求而更新,而不是重新创建。我不知道为什么会出现这个问题。
/var/lib/php/sessions
Ubuntu 机器上的权利是 1733。
答案1
事实证明我太愚蠢了。不久前,我在该服务器上创建了一个 Apache VHost,并通过 删除了该 VHost 的 cookie Header unset Set-Cookie
。不幸的是,这是默认的 VHost,我只使用服务器的 IP 地址进行了 PHP 会话测试(我还没有域名)。我通过浏览器的开发人员工具发现 - PHPSESSID cookie 从未在 HTTP 响应标头中发送,然后我想起了我在默认 VHost 中的奇怪选择。