[英]Codeigniter – how to avoid database caching for sessions
我正在Codeigniter上开发一个网站(带有购物车),并希望使用sess_use_database设置使用户更难以破解购物车会话。
我还想使用数据库缓存来加速常见的数据库请求(例如'获取类别',因为大多数数据库内容不会定期更改),所以我启用了这个设置:
$db['development']['cache_on'] = TRUE;
//where 'development' is my environment
因此,我发现会话内容没有刷新,例如在此请求上:
$this->basket_contents = array_values($this->session->userdata('basket_contents'));
另外,我试过这个:
$this->db->cache_off();
...在会话请求之前,但它没有解决问题(我假设它不是直接的DB请求)。
我的会话设置如下:
$config['sess_cookie_name'] = 'str_session';
$config['sess_expiration'] = 7200;
$config['sess_encrypt_cookie'] = FALSE;
$config['sess_use_database'] = TRUE;
$config['sess_table_name'] = 'ci_sessions';
$config['sess_match_ip'] = FALSE;
$config['sess_match_useragent'] = TRUE;
$config['sess_time_to_update'] = 300;
我可以阻止缓存与会话相关的数据库请求吗? 或者阻止某些表被缓存?
或者是否有另一个(可能是显而易见的)解决方案我没有想过?
提前致谢。
在CodeIgniter中,缓存是一种全有或全无的解决方案,您无法为单个表启用它。
我能想到两个选择:
在高达2.2.1的版本中,可能有一个简单的解决方案:
在文件系统/ libraries / Session.php中
查找字符串“$ query = $ this-> CI-> db-> get($ this-> sess_table_name);”
放线之前:
// saving cache_on $cache_on = $this->CI->db->cache_on; $this->CI->db->cache_on = false;
放线后:
// restoring cache_on $this->CI->db->cache_on = $cache_on;
这将阻止mysql缓存这个确切的会话查询,保持缓存逻辑不变。
请注意,此编辑涉及框架系统文件,因此如果将CI升级到较高版本 - 此hack将丢失。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.