2013-05-28 85 views
2

我需要訪問Node.js中的PHP會話,所以我認爲一個好主意應該是將會話編碼爲JSON,並將其解碼爲Node.js.PHP自定義session.serialize_handler JSON

我知道我可以設置session.save_handler = memcached,但是有沒有辦法設置session.serialize_handler = some_json_handler?還是我必須使用session_set_save_handler自己編碼?

任何幫助非常感謝!

+0

我想你必須自己編碼。我建議實現SessionHandler/SessionHandlerInterface(如果可能,PHP> 5.4) - 在我看來,這是一種比爲會話處理註冊簡單函數更簡潔的方法。 http://www.php.net/manual/en/class.sessionhandler.php – CBroe

+0

@CBroe我在PHP 5.3.3上。我可以像'session_set_save_handler(array($ this,'open'),...')綁定它,以避免簡單的函數 – Aley

回答

1

我有同樣的要求。我正在使用龍捲風並需要訪問python中的php會話。 請點擊此鏈接https://github.com/lboynton/memcached-json-session-save-handler/blob/master/library/Lboy/Session/SaveHandler/Memcached.php。 希望這有助於。

1

我已經得到了它與couchbase,至少是一個概念證明。你可能想試試這個https://github.com/msgpack/msgpack-php和node.js相等。這應該看你是對的。

的代碼有是爾康那麼你的目的可能不是很有用,但爲了完整起見(其中$this->_instance()返回couchbase /內存緩存實例)

\ini_set('session.serialize_handler', 'msgpack'); 

,並在會話處理器

public function read($sessionId){ 
    $data = $this->_instance()->get($this->_getSessionId($sessionId), $this->getOption('lifetime')); 
    if(!empty($data)){ 
     $data = json_decode($data, true); 
     return \msgpack_pack($data); 
    } 
    return ''; 
} 

public function write($sessionId, $data){ 
    session_decode($data); 
    $serializedData = json_encode($_SESSION); 
    $this->_instance()->save($this->_getSessionId($sessionId), $serializedData, $this->getOption('lifetime')); 
} 

我無法讓msgpack與phalcon/couchbase/node在我有的時候一起工作,因爲會話的工作量只有很小的百分比,還需要學習節點,編寫應用程序以查明它是否即使做我們想要的;)

我使用msgpack因爲我不能用session_encode()在我的PHP出於某種原因,可能是由於MVC實現

節點JS的東西 - 它使用快遞,並且是我在節點的第一次嘗試,這樣記住:)

var memcache = require("memcache"); 
var client = new memcache.Client(11211, "localhost"); 
client.connect(); 

client.get("/sessions/"+req.cookies.PHPSESSID, function(error, result){ 
    if(typeof(error)==="undefined"){ 
     var session = JSON.parse(result); 
     console.log('session : ',session); 
     res.render('view/name', { title: 'Express' , sessionData: session}); 
    }