【发布时间】:2019-07-20 09:36:38
【问题描述】:
我有一个相当精细的多页查询表单。实际上,我的网站有几个用于查询不同的数据集。由于这些查询参数跨越多个页面请求,我依靠会话来存储累积的查询参数。我担心存储在 session 中的数据在序列化时可能会超过CodeIgniter session documentation 指定的data 列的 MySQL BLOB 存储容量(65,535 字节)的存储容量:
CREATE TABLE IF NOT EXISTS `ci_sessions` (
`id` varchar(128) NOT NULL,
`ip_address` varchar(45) NOT NULL,
`timestamp` int(10) unsigned DEFAULT 0 NOT NULL,
`data` blob NOT NULL,
KEY `ci_sessions_timestamp` (`timestamp`)
);
如何存储我的用户输入的查询参数并确保它们将为给定用户保留?
我考虑过使用file-based-caching 使用从会话 ID 生成的密钥来缓存这些数据:
// controller method
public function my_page() {
// blah blah check POST for incoming query params and validate them
$validated_query_params = $this->input->post();
// session library is auto-loaded
// but apparently new session id generated every five mins by default?
$cache_key = "query_params_for_sess_id" . $this->session->session_id;
$this->load->driver('cache');
// cache for an hour
$this->cache->file->save($cache_key, $validated_query_params, 3600);
}
但是,我担心当为给定用户生成新的会话 ID 时,会话 ID 可能会发生变化。显然 this happens by default every five minutes 作为 CodeIgniter 生成新的会话 ID 以增强安全性。
任何人都可以提出一种可靠的(而且有效的!)存储超过 64K blob 大小的会话数据的方法吗?
【问题讨论】:
标签: php mysql codeigniter session