【问题标题】:PHP custom session.serialize_handler JSONPHP 自定义 session.serialize_handler JSON
【发布时间】:2013-05-23 07:03:27
【问题描述】:

我需要在 Node.js 中访问 PHP 会话,所以我认为将编码为 JSON 的会话与 memcached 一起存储并在 Node.js 中解码是一个好主意。

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

非常感谢任何帮助!

【问题讨论】:

  • 我认为您必须自己编写代码。我建议实现 SessionHandler/SessionHandlerInterface(如果可能,PHP > 5.4)——在我看来,这比注册简单的会话处理函数更简洁。 php.net/manual/en/class.sessionhandler.php
  • @CBroe 我使用的是 PHP 5.3.3。我可以像session_set_save_handler(array($this, 'open'), ... 那样绑定它来避免简单的功能

标签: php json node.js session


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我已经让它与 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 实现

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

    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});
        }
    

    【讨论】:

      猜你喜欢
      • 2017-07-27
      • 1970-01-01
      • 1970-01-01
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-09
      • 2016-01-10
      相关资源
      最近更新 更多