我需要在 Node.js 中访问 PHP 会话,所以我认为一个好主意是使用 memcached 存储编码为 JSON 的会话并在 Node.js 中对其进行解码。
我知道我可以设置session.save_handler = memcached
,但有没有办法设置session.serialize_handler = some_json_handler
?还是我必须自己使用编码session_set_save_handler
?
非常感谢任何帮助!
我已经让它与 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});
}
我有同样的要求。我正在使用龙卷风,需要在 python 中访问 php 会话。按照这个链接https://github.com/lboynton/memcached-json-session-save-handler/blob/master/library/Lboy/Session/SaveHandler/Memcached.php
。希望这可以帮助。