PyroCMS / Codeigniter:db中的会话条目太多

时间:2013-05-16 18:43:55

标签: database codeigniter session pyrocms

我正在使用一个小网站pyrocms / codeigniter组合。 添加一些内容后,我检查了数据库,看到了: multiple session id's

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

我的会话配置如下:

$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-job。我认为这很好。

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

1 个答案:

答案 0 :(得分:4)

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

您可以在CI manual中详细了解会话ID行为。这是从该页面复制的摘录。

  

用户唯一的会话ID(这是一个统计上随机的字符串   具有非常强的熵,用MD5进行散列以便于携带,以及   每五分钟重新生成(默认情况下)

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

如果它真的困扰你,你可以改变主CI配置文件中的超时。改变行

  

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

到大于

的数字
  

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

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

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