Php 跨会话缓存
是否存在跨(-user)会话缓存机制 问题是:Php 跨会话缓存,php,zend-framework,caching,Php,Zend Framework,Caching,是否存在跨(-user)会话缓存机制 问题是: 我正在构建一个经常触发SOAP查询的Magento模块(Linux上的Magento+Zend) 其中一些查询只是请求sessionID,因此可以使用超时控件保存它(考虑到每个sessionID持续一小时) 这些sessionId与服务器到服务器的通信有关;与当前用户会话(例如备份操作)没有关系。也就是说,我不担心一个人冒充另一个人 我听过一些关于APC的不好的事情/帖子-所以我把它放在一边。如果你有什么好的理由让我重新考虑它作为一个选项,请告
- 我正在构建一个经常触发SOAP查询的Magento模块(Linux上的Magento+Zend)李>
- 其中一些查询只是请求sessionID,因此可以使用超时控件保存它(考虑到每个sessionID持续一小时)
- 这些sessionId与服务器到服务器的通信有关;与当前用户会话(例如备份操作)没有关系。也就是说,我不担心一个人冒充另一个人李>
$frontendOptions = array(
'lifetime' => 7200, // cache lifetime of 2 hours
'automatic_serialization' => true
);
$backendOptions = array(
'cache_dir' => './tmp/' // Directory where to put the cache files
);
// getting a Zend_Cache_Core object
$cache = Zend_Cache::factory('Core',
'File',
$frontendOptions,
$backendOptions);
if( ($result = $cache->load('myresult')) === false ) {
// cache miss; connect to the database
$db = Zend_Db::factory( [...] );
$result = $db->fetchAll('SELECT * FROM huge_table');
$cache->save($result, 'myresult');
} else {
// cache hit! shout so that we know
echo "This one is from cache!\n\n";
}
print_r($result);
不确定magento的具体细节,但作为ZF开发人员,有几种方法可以实现这一点: 如果通过跨会话引用存在于同一服务器上但位于不同子域下的应用程序,则可以执行以下操作: 在application.ini中:
session.domaincookie = .mysite.co.uk ;
然后在bootstrap中
Zend_Session::setOptions($this->getOption('session'));
上述方法将使会话数据在所有子域中可见
如果是第三方API,则只需将sessionId存储在本地会话中:
$s = new Zend_Session_Namespace("user_session");
$s->session_id = $api->session_id;
$s->setExpirationSeconds(strtotime("+1 hour"));
不要使用APC,这是一个废弃的项目。如果需要内存缓存,请使用Redis或Memcached。您也可以使用Zend_缓存。我所说的跨会话是指跨(-user)-会话。整个应用程序将在同一服务器跨用户会话中运行?相同的URI和用户?具体的设置是什么?如果在一个用户会话期间,我需要向给定的服务器请求sessionId,为什么我要向另一个针对同一服务器的用户请求另一个requestId?Zend_会话_名称空间不是对所有用户都可见的,它是一个仅对一个用户可见的信息。对吗?每个用户的会话ID都是唯一的。不能有两个用户具有相同的会话ID。让我这样告诉你,如果我偷了你的会话ID,我就可以冒充你,不是个好主意吗?我明白了。如果您正在重用会话ID,那么最好的办法就是简单地缓存它们。您可以使用Zend_缓存缓存ID。如果愿意,您可以使用memcached backend进行zend_缓存。见: