从数据库

时间:2016-02-08 16:38:34

标签: php mysql session

我目前正将我的会话存储在我的 mysql数据库中但是我看到很多会话的到期日期已到达。现在我没有任何其他类型的脚本运行来收集过期然而,我读到了关于垃圾收集的会话,但垃圾收集一旦到期就很少有机会处理大量的过期会话。

  

我期待一个自动删除过期会话的脚本或替代解决方案吗?

1 个答案:

答案 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