session.gc() 函数似乎无法单独工作。它删除了服务器上的数据,但数据以 Cookie 的形式保留在浏览器中。以下代码删除了服务器上的会话文件,但没有删除浏览器上的会话文件。
ini_set('session.gc_maxlifetime', 10);
ini_set('session.gc_probability', 1);
ini_set('session.gc_divisor', 1);
// 启动会话
session_start();
$_SESSION['test'] = 'temporary data';
session_write_close();
// 等待15秒以确保会话过期
sleep(15);
// 手动再次启动会话以触发会话处理
session_start();
session_gc();
// 检查会话数据是否仍然可用
if (isset($_SESSION['test'])) {
echo "Session is still active.";
} else {
echo "Session expired and file deleted.";
}
但是这段代码删除了服务器上的会话文件,也删除了cookie,并使超全局变量为空
session_start();
$_SESSION['test'] = 'temporary data';
session_write_close();
// 等待15秒以确保会话过期
sleep(15);
session_start();
// 手动触发垃圾回收
setcookie(session_name(), '', time() - 10);
$_SESSION = [];
session_gc();
// 检查会话数据是否仍然可用
if (isset($_SESSION['test'])) {
echo "Session is still active.";
} else {
echo "Session expired and file deleted.";
}