2014-02-22 27 views
0

我想与Memcache作为Joomla的会话处理程序进行通信。在PHP docs底部示例之后,我已经将memcache注册为会话处理程序。只要用户加载Joomla网站,其会话ID和其他用户数据一起存储到Joomla数据库中。但是现在我不知道如何让Memcache读取序列化会话数据,就像使用XCache使用xcache_get($sessionid)一样,只要我创建一个新的Memcache实例,就可以在文档顶部示例中看到会话条目被删除来自数据库。但会议仍然存在。这让我很困惑。我需要访问(读/写)序列化的用户会话。我怎样才能从PHP会话处理程序中获取/设置它?序列化用户会话在Memcache中作为会话处理程序存储在哪里?以及如何读取/写入序列化的数据?

+0

这是什么版本的joomla?在任何情况下,如果不是通过Joomla的会话实现,您通常可以通过$ _SESSION超级全局访问会话本身。直接访问会话不是最好的主意。 –

+0

我指的是Joomla 3.2。相信我,我知道直接操纵并不是一个好主意,但我正在努力开发一个[补丁问题](https://github.com/joomla/joomla-cms/pull/3126),并且想要获得手牌在Memcache采用其他会话处理程序的工作代码到Memcache(d)处理程序(s) – user1014412

回答

0

我相信你正在寻找相当于是这样的:

获取会话:

$session = $memcache->get($sessionId); 

设置会话:

$memcache->set(
    'sessionprefix:'.$sessionId, // the session id. 
    $session,   // the actual session itself 
    false,    // set to true to use compression 
    $expire,   // expiration in second 
); 

我还没有使用的memcache非常但我已经读过,人们通常在键中使用前缀来分隔不同类型的对象(这也是redis类似的数据存储的常见做法)。我在这里使用了'sessionprefix:',但我确定Joomla有他们自己的特定前缀。

+0

是的,我已经假设从[此线程](http://stackoverflow.com/questions/1816128/change-serialization-函数式的PHP换分布式缓存)。但是没有回答的问题是:“变量$ memcache涉及到什么?”它不是全球性的。如前所述,我试图将它与一个新的Memcache实例关联起来,该实例未能按预期工作。我想这创建了第二个Memcache实例。前缀不应该是一个问题。主要问题是找出序列化数据所在的位置,以便我可以加载,反序列化,处理并将其存储回来以使更改生效。 – user1014412

+0

memcache中的数据驻留在正在运行的memcache服务器的内存中(因此名称)。 memcache API(或协议)是修改它的唯一方法。查看http://blog.softlayer.com/2012/meet-memcached-a-developers-best-friend和http://memcached.org/about获取更详细的解释。 –

+0

这对我来说并不新鲜。但是你正在混合数据缓存和会话缓存。虽然在使用数据缓存之前,数据缓存是明确地实例化的,但在通过ini_set()将其注册为PHP session.handler时不会。在我的初始文章中检查链接的PHP文档。后者没有提及它的回报,这就是为什么我坚持要求从它序列化的会话数据。此外,你友善的链接页面一起指的是另一个加速器 - MemcachD - (注意尾部D),这不是我所指的。我的问题涉及到Memcache - 没有尾随D. – user1014412

相关问题