(PHP 7 >= 7.1.0, PHP 8)
session_gc — 执行会话数据垃圾回收
session_gc() 用于执行会话数据 GC(垃圾回收)。默认情况下,PHP 使用基于概率的会话 GC。
基于概率的 GC 有一定的效果,但也存在一些问题。1) 低流量网站的会话数据可能无法在首选时间范围内被删除。2) 高流量网站的 GC 可能会过于频繁。3) GC 是在用户请求时执行的,用户会遇到 GC 延迟。
因此,建议使用诸如 UNIX 类系统上的 "cron" 等工具,定期执行 GC 以用于生产系统。确保通过将 session.gc_probability 设置为 0 来禁用基于概率的 GC。
此函数没有参数。
session_gc() 返回成功删除的会话数据的数量,false
表示失败。
旧的保存处理程序不返回删除的会话数据数量,只返回成功/失败标志。如果是这种情况,则无论实际删除了多少数据,删除的会话数据数量都将变为 1。
示例 #1 session_gc() 适用于 cron 等任务管理器的示例
<?php
// 注意:此脚本应由 Web 服务器进程的相同用户执行。
// 需要活动会话才能初始化会话数据存储访问。
session_start();
// 立即执行 GC
session_gc();
// 清理 session_gc() 创建的会话 ID
session_destroy();
?>
示例 #2 session_gc() 适用于用户可访问脚本的示例
<?php
// 注意:建议 session_gc() 由任务管理器脚本使用,但
// 可以按如下方式使用。
// 用于最后一次 GC 时间检查
$gc_time = '/tmp/php_session_last_gc';
$gc_period = 1800;
session_start();
// 仅在 GC 周期过去时才执行 GC。
// 也就是说,每次请求都调用 session_gc() 是浪费资源的。
if (file_exists($gc_time)) {
if (filemtime($gc_time) < time() - $gc_period) {
session_gc();
touch($gc_time);
}
} else {
touch($gc_time);
}
?>