php - Codeigniter – 如何避免 session 的数据库缓存

标签 php caching codeigniter session-cookies

我正在 Codeigniter 上开发一个网站(带有购物车),并希望使用 sess_use_database 设置来让用户更难破解购物车 session 。

我还想使用数据库缓存来加速常见的数据库请求(例如“获取类别”,因为大多数数据库内容不会定期更改),所以我启用了此设置:

$db['development']['cache_on'] = TRUE; 
//where 'development' is my environment

因此,我发现 session 内容没有被刷新,例如在这个请求中:

$this->basket_contents = array_values($this->session->userdata('basket_contents'));

另外,我试过这个:

$this->db->cache_off();

...在 session 请求之前,但它并没有解决问题(我假设是因为它不是直接的数据库请求)。

我的 session 设置如下:

$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;

我可以阻止与 session 相关的数据库请求的缓存吗?或者阻止某些表被缓存?

或者还有其他我没有想到的(可能是显而易见的)解决方案吗?

提前致谢。

最佳答案

在 CodeIgniter 中缓存是一个全有或全无的解决方案,您不能为单个表启用它。

我能想到的有两种选择:

  • 不要使用 CI 的通用缓存,而是使用像 http://philsturgeon.co.uk/code/codeigniter-cache 这样的缓存库
  • 破解 db_driver.php。在第 265 行(CI 1.7.2)上,它检查是否启用了缓存。更改该行,使其在 session 表上的 SELECT 时不执行此操作。

关于php - Codeigniter – 如何避免 session 的数据库缓存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4424565/

相关文章:

php - 返回最后 2 位数字

php - 在 PostgreSQL 和 PDO 中使用 Haversine 公式

c++ - 内存池 : will they improve cache usage for structs larger than the cache line size?

Spring Security - 无法避免缓存控制

php - 如何使用 codeigniter 从同一卷中获取列中的总和值并显示所有行?

php - 从 Codeigniter 中的类创建对象

php - MySQL 查询返回的分组结果

php - 错误 60 : SSL certificate issue with Youtube Api v3

php - 使用 PHP 进行缓存以减轻 MySQL 的压力

php - 在 CodeIgniter 中为我的 Web 应用程序创建移动版本