我目前正将我的会话存储在我的 mysql数据库中但是我看到很多会话的到期日期已到达。现在我没有任何其他类型的脚本运行来收集过期然而,我读到了关于垃圾收集的会话,但垃圾收集一旦到期就很少有机会处理大量的过期会话。
我期待一个自动删除过期会话的脚本或替代解决方案吗?
答案 0 :(得分:1)
你必须实现你的会话处理程序类,它的gc函数可以删除旧的会话数据:
function gc($lifetime) {
$db = new PDO("mysql:host=myhost;dbname=mydb", "myuser", "mypassword");
$sql = "DELETE FROM session WHERE session_lastaccesstime < DATE_SUB(NOW(), INTERVAL " . $lifetime . " SECOND)";
$db->query($sql);
}
垃圾收集由PHP随机执行。该 调用垃圾收集的概率是通过 php.ini指令session.gc_probability和session.gc_divisor。如果 概率设置为1,除数设置为100,例如, 垃圾收集器有1%的机会在每个请求上运行 (1/100)。
您需要将gc设置为处理程序:
session_set_save_handler(array($sessionHandler,"open"),
array($sessionHandler,"close"),
array($sessionHandler,"read"),
array($sessionHandler,"write"),
array($sessionHandler,"destroy"),
array($sessionHandler,"gc"));
详细了解如何使用它:
http://php.net/manual/en/function.session-set-save-handler.php