PyroCMS / Codeigniter:数据库中的会话条目太多

Jen*_*ens 3 database session codeigniter pyrocms

我在一个小网站上使用了pyrocms / codeigniter 组合。添加一些内容后,我检查了数据库并看到: 多个会话 ID

这是正常行为吗?一个用户有多个session_ids 具有相同的ip?我无法想象这是正确的。

我的会话配置如下所示:

$config['sess_cookie_name']     = 'pyrocms' . (ENVIRONMENT !== 'production' ? '_' . 

ENVIRONMENT : '');
$config['sess_expiration']      = 14400;
$config['sess_expire_on_close'] = true;
$config['sess_encrypt_cookie']  = true;
$config['sess_use_database']    = true;
// don't change anything but the 'ci_sessions' part of this. The MSM depends on the 'default_' prefix
$config['sess_table_name']      = 'default_ci_sessions';
$config['sess_match_ip']        = true;
$config['sess_match_useragent'] = true;
$config['sess_time_to_update']  = 300;
Run Code Online (Sandbox Code Playgroud)

我没有更改影响会话类或类似内容的代码行。

红帽行属于 15 分钟的 cron 作业。我认为这很好。

每次刷新页面时都会添加两到三个新的 session_entries...

col*_*ick 5

是的,这是正常的。CI会话类定期自动生成新的ID。(默认情况下每 5 分钟一次。)这是使用 CI 会话而不是本机 PHP 会话所固有的安全性的一部分。垃圾收集会处理这个问题,你不需要做任何事情。

您可以在CI 手册中阅读有关会话 ID 行为的更多信息。这是从该页面复制的摘录。

用户的唯一会话 ID(这是一个统计随机字符串,具有很强的熵,使用 MD5 进行哈希处理以实现可移植性,并且(默认情况下)每五分钟重新生成一次)

此行为是设计使然。没有什么需要修复的。会话类内置了垃圾收集功能,可以根据需要删除旧条目。多年来我有很多项目使用代码点火器。这就是它的作用。

如果它确实困扰您,您可以更改主 CI 配置文件中的超时。换线

$config['sess_time_to_update'] = 300(5 分钟刷新周期)

到一个大于

$config['sess_expiration'](默认 7200)

这将导致会话在重新生成之前超时。从理论上讲,这本质上不太安全,但除非您正在处理敏感数据,否则在实践中可能无关紧要。

但同样,这是设计为 CI 会话多层的一部分。这些和其他功能使它比 PHP 原生会话更好。您可以打开分析并发现这些查询的开销可以忽略不计,特别是考虑到框架提供的所有其他优化。