我有一个巨大的多维数组,其中包含我想要保留在内存中的配置。 这些配置定义是用户可以进入网页。
最初我认为APC只会在特定会话期间缓存数据。但很快我意识到我错了。
所以我想出了这个想法。
#Codeigniter设置session_id
$sessionId = $this->session->userdata('session_id');
#并使用该session_id我可以为存储在apc缓存中的每个密钥添加前缀
$key = $session_id . '_' . 'config';
#然后我序列化数据数组
$data = serialize($configurations_array);
#LOAD APC CACHE LIBRARY
$this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));
#SET DATA和CACHE LIFETIME使用配置文件的相同会话持续时间
$this->cache->save($key, $data_serialized, $this->config->item('sess_expiration'));
#READ DATA FROM CACHE
$cached_configurations = $this->cache->get($key);
var_dump($cached_configurations);
#REMOVE DATA ON LOGOUT
apc_delete($key);
你对此有何看法?
我忘了提到我测试了它并且工作正常。
答案 0 :(得分:2)
为什么不将链接到会话的数据放在会话本身(显然不在会话cookie中,而是在服务器端)?我想CodeIgniter提供了一些在服务器端存储会话数据的工具(不使用APC)。
您手工制作的解决方案可能有效但似乎是解决非常标准问题的非常规方法。在普通的PHP中,我只需在$_SESSION['foo'] = 'bar'
之后使用session_start()
来存储服务器端的会话数据。会话cookie仅存储会话ID。
This article解释了如何在CodeIgniter中使用本机PHP会话。本机PHP会话由普通文件支持,定期清除。如果会话数据非常大,您可以考虑storing it in the database。
无论您选择何种解决方案,我的建议都是保持简单并使用标准解决方案。