2014-02-22 61 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

相關問題