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

Database PyroCMS/Codeigniter:数据库中的会话条目太多,database,codeigniter,session,pyrocms,Database,Codeigniter,Session,Pyrocms,我正在使用pyrocms/codeigniter组合作为一个小网站。 添加一些内容后,我检查了数据库,发现: 这是正常的行为吗?具有相同ip的一个用户的多个会话\u ID? 我无法想象这是正确的 我的会话配置如下所示: $config['sess_cookie_name'] = 'pyrocms' . (ENVIRONMENT !== 'production' ? '_' . ENVIRONMENT : ''); $config['sess_expiration'] =

我正在使用pyrocms/codeigniter组合作为一个小网站。 添加一些内容后,我检查了数据库,发现:

这是正常的行为吗?具有相同ip的一个用户的多个会话\u ID? 我无法想象这是正确的

我的会话配置如下所示:

$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;
我并没有在影响会话类或类似内容的代码行中进行更改

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


每次刷新页面时,会添加两个或三个新的会话项…

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

您可以在中阅读有关会话id行为的更多信息。这是从那一页复制的摘录

用户的唯一会话ID(这是一个统计上随机的字符串 具有非常强的熵,使用MD5散列以实现可移植性,以及 每五分钟重新生成一次(默认情况下)

这种行为是故意的。没有什么可修的。会话类具有内置的垃圾收集功能,可以根据需要删除旧条目。我有很多使用CodeIgniter的项目已经好几年了。它就是这样做的

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

$config['sess\u time\u to\u update']=300(5分钟刷新周期)

到一个大于

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

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


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

里面有什么帮助吗?谢谢你的帮助,但恐怕没有;(手册中没有提到任何关于5分钟更新或id行为的内容。但是,从下面的内容来看,它看起来确实每5分钟重新生成一次,但如果设置了match ip和/或match user agent,它也会尝试更新现有会话。您认为这会修复重复条目吗?我的答案加长了,以考虑到您的命令。)ntsI在我的左眼有一个小盲点…那一定是那条线所在的地方;)谢谢你扩展了你的答案。我希望这回答了所有的问题。但是会话ID将在每页刷新时创建。你怎么解释?