【问题标题】:Is it correct to use APC cache to store information that is linked to a particular session?使用 APC 缓存来存储链接到特定会话的信息是否正确?
【发布时间】:2014-01-04 18:40:30
【问题描述】:

我有一个巨大的多维数组,其中包含我想保存在内存中的配置。 这些配置定义了用户可以进入网页。

最初我认为 APC 只会在特定会话期间缓存数据。但很快我就意识到我错了。

所以我想出了这个主意。

#Codeigniter 设置 session_id

$sessionId = $this->session->userdata('session_id');

#并且使用该 session_id,我可以为存储在 apc 缓存中的每个键添加前缀

$key = $session_id . '_' . 'config'; 

#然后我序列化数据数组

$data = serialize($configurations_array);

#LOAD APC 缓存库

$this->load->driver('cache', array('adapter' => 'apc', 'backup' => 'file'));

#使用配置文件中的相同会话持续时间设置数据和缓存生命周期

$this->cache->save($key, $data_serialized, $this->config->item('sess_expiration'));

#从缓存中读取数据

$cached_configurations = $this->cache->get($key);
var_dump($cached_configurations);

#注销时删除数据

apc_delete($key);

对此你有什么想说的?

编辑

我忘了说我测试过它,它工作正常。

【问题讨论】:

  • 您存储的数据是什么? (如果它从缓存中退出,是否可以重新创建?)

标签: php codeigniter session caching apc


【解决方案1】:

为什么不将链接到会话的数据放在会话本身中(显然不是在会话 cookie 中,而是在服务器端)?我猜 CodeIgniter 提供了一些工具来在服务器端存储会话数据(不使用 APC)。

您的手工解决方案可能有效,但似乎是解决非常标准问题的非常规方式。在普通的 PHP 中,我只是在 session_start() 之后使用 $_SESSION['foo'] = 'bar' 在服务器端存储会话数据。会话 cookie 仅存储会话 ID。

This article 解释了如何通过 CodeIgniter 使用原生 PHP 会话。本机 PHP 会话由普通文件支持,并定期清除。如果会话数据很大,可以考虑storing it in the database

无论您选择哪种解决方案,我的建议是保持简单并使用标准解决方案。

【讨论】:

  • 感谢分享。我不得不用本机会话替换 codeigniter 会话,但是通过这个解决方案,我能够在会话中存储这 1500 个字符。比用上面的APC手工解决方案好多了呵呵
猜你喜欢
  • 2010-12-16
  • 2018-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多