SessionHandlerInterface::gc
Cleanup old sessions
适用PHP版本:PHP 5.4.0及以上版本
SessionHandlerInterface::gc 是一个用于回收无效会话数据的函数,通常在会话垃圾回收(GC)机制中被调用。此方法会清理过期或无效的会话数据,以保持会话存储的整洁。GC操作在配置的时间间隔内自动触发,或者通过调用该方法手动触发。
public abstract function gc(int $maxlifetime): bool;
返回布尔值:如果回收成功,则返回 true,如果失败则返回 false。
假设你自定义了一个会话存储机制并实现了 SessionHandlerInterface。下面是一个实现 gc 方法的示例:
public function close() {
// 会话关闭时的操作
return true;
}
public function read($sessionId) {
// 读取会话数据
return '';
}
public function write($sessionId, $data) {
// 写入会话数据
return true;
}
public function destroy($sessionId) {
// 销毁会话
return true;
}
public function gc($maxlifetime) {
// 删除超过最大生命周期的会话数据
$currentTime = time();
$expiredSessions = [];
// 假设 sessions 存储在某个目录中
$sessionFiles = glob('/path/to/sessions/*');
foreach ($sessionFiles as $file) {
if ($currentTime - filemtime($file) > $maxlifetime) {
$expiredSessions[] = $file;
unlink($file); // 删除过期会话文件
}
}
// 如果有过期的会话文件被删除,返回 true
return count($expiredSessions) > 0;
}
}
在这个示例中,我们自定义了一个会话处理器 MySessionHandler,并实现了 gc
方法。此方法首先获取当前的时间戳,然后遍历所有的会话文件,判断它们是否过期(即文件的修改时间距离当前时间大于 $maxlifetime)。对于过期的会话文件,调用 unlink() 删除它们。如果有任何会话文件被删除,返回 true,否则返回 false。