2

我需要在 Node.js 中访问 PHP 会话,所以我认为一个好主意是使用 memcached 存储编码为 JSON 的会话并在 Node.js 中对其进行解码。

我知道我可以设置session.save_handler = memcached,但有没有办法设置session.serialize_handler = some_json_handler?还是我必须自己使用编码session_set_save_handler

非常感谢任何帮助!

4

2 回答 2

1

我已经让它与 couchbase 一起工作,至少是一个概念证明。你可能想试试这个https://github.com/msgpack/msgpack-php和 node.js equiv。那应该看你的权利。

代码在 phalcon 中,因此可能对您的目的没有用,但为了完整起见(其中$this->_instance()返回 couchbase / memcache 实例)

\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 是因为由于某种原因我无法在我的 php 中使用 session_encode(),这可能是由于 MVC 实现

节点 JS 的东西 - 它使用 express,并且是我第一次尝试节点,所以请记住:)

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});
    }
于 2013-11-07T13:55:44.547 回答
1

我有同样的要求。我正在使用龙卷风,需要在 python 中访问 php 会话。按照这个链接https://github.com/lboynton/memcached-json-session-save-handler/blob/master/library/Lboy/Session/SaveHandler/Memcached.php。希望这可以帮助。

于 2013-08-25T08:49:04.797 回答