【问题标题】:CodeIgniter: Sessions aren't being cleared from 'ci_sessions` tableCodeIgniter:会话未从“ci_sessions”表中清除
【发布时间】:2015-10-13 16:55:48
【问题描述】:

我的 CodeIgniter 设置有一点问题。 我将 CodeIgniter 配置为将会话保存并存储在数据库的 ci_session 表中。正如我已经阅读了一些内容,我知道每次加载会话库时都应该清理数据库中的旧会话表。 今天我访问了我的数据库,我看到该表已经包含600 sessions,当只有我和朋友在开发系统并且没有其他用户访问这些页面时,在数据库中对timestamp 列进行排序后,我看到它存储了来自5th of October 的记录。

我当然希望它清除旧会话。

这是我在config.php 文件中的会话配置:

$config['sess_driver'] = 'database';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 86400;     // Default: 7200
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = TRUE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

请指教。

谢谢, 斯拉维克。

【问题讨论】:

    标签: php codeigniter session


    【解决方案1】:

    在垃圾回收开始之前,过期的会话不会被删除。随机调用,频率根据session.gc_divisorsession.gc_probability参数而定。

    如果你想尽快发生,你应该减少session.gc_divisor

    【讨论】:

    • 感谢您的回复。所以让我理解它......它通过概率计算动作......例如在我的情况下,@ 987654326@和@ 987654327@,这使得1个会话/用户正在访问1000个网站,会触发清洗事件吗?如果是这样,我肯定会将gc_divisor 的值降低到100 或类似的值。
    • 是的,你有 0.1% 的概率调用 gc。随着gc_divisor100,它增加到 1%
    • 对于上述答案,数据库字段 user_agent 可能不够大,无法容纳用户代理的完整字符串(因此会生成新会话)尝试将其类型更改为 TEXT 而不是varchar
    • @Philip,嗨,实际上我没有在任何字段中存储user_agent,我尝试添加该字段但它没有在其中存储任何内容。也许是附加配置,但找不到任何相关信息。
    • ci_sessions 表存储用户代理,就像我记得的user_agent varchar(120) NOT NULL 一样,至少对于版本 2.X。这会导致我建议的问题。
    猜你喜欢
    • 1970-01-01
    • 2016-03-09
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2013-02-27
    • 1970-01-01
    相关资源
    最近更新 更多