codeigniter - 如何清理过期的 codeigniter session ?

标签 codeigniter session

专家,

我试图了解如何在 Codeigniter 中清理 session ,以防应用程序配置为将 session 存储在数据库表中。

在我的情况下,我在该 session 表中有三个过期 session ,一个是同一个用户的事件 session 。该手册指出:
“注意:Session 类具有内置垃圾收集功能,可以清除过期的 session ,因此您无需编写自己的例程来执行此操作。”

嗯,那么我在 db session 表中的“旧” session 什么时候被清除,或者我遗漏了什么?

谢谢!

最佳答案

下面是Session类的相关源码:

/**
 * Garbage collection
 *
 * This deletes expired session rows from database
 * if the probability percentage is met
 *
 * @access  public
 * @return  void
 */
function _sess_gc()
{
    if ($this->sess_use_database != TRUE)
    {
        return;
    }

    srand(time());
    if ((rand() % 100) < $this->gc_probability)
    {
        $expire = $this->now - $this->sess_expiration;

        $this->CI->db->where("last_activity < {$expire}");
        $this->CI->db->delete($this->sess_table_name);

        log_message('debug', 'Session garbage collection performed.');
    }
}

这个函数在一个地方调用,在 Session 类的构造函数中(几乎是最后一行),所以正常情况下每个请求调用一次。
$this->gc_probability硬编码为 5在类(class)的顶部,似乎无法更改它。我不确定,但我相信这意味着 5% 的时间(随机)垃圾收集将运行,从 session 数据库表中清除旧条目。

请注意,这些旧条目没有意义或有害,清理只是为了您的数据库表不会因旧的、无用的记录而过载。

关于codeigniter - 如何清理过期的 codeigniter session ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13464840/

相关文章:

mysql - 使用 Ignited-Datatables 搜索时操作 'like' 的排序规则的非法混合

php - 如何在 Codeigniter 中使用到期日期/到期日期获取行数?

php - Where_in 在 codeigniter 中

php - Laravel 4.1 - 错误消息保留用于下一个请求

php - 从其他类访问登录的 User 对象的最佳实践

IIS Web Farm 上的 session Cookie

c# - 授权和 ASP.NET MVC 缓存

php - 从 codeigniter 中删除查询

java - tomcat服务器如何识别客户端以创建 session ID

php - CodeIgniter 404 页面