在Node.js中获取请求标头以获取PHP会话ID

时间:2014-03-02 05:07:11

标签: javascript php node.js cookies

我有一个完全用PHP开发的应用程序,现在我想在我的应用程序中集成RTN(实时通知系统)。目前,我已经完成了在PHP使用此代码

呈现的页面之后连接到Node.js

SERVER:

var app = http.createServer(function(request,response)
{
   response.writeHead(200,{"Content-Type":"text/plain"});
   response.end();
}).listen(3000);

var io = require('socket.io').listen(3000);

客户端

<script src="http://localhost:3000/socket.io/socket.io.js"></script>
<script>
  var socket = io.connect('http://localhost:3000');
  socket.on('news', function (data) {
    console.log(data);
    socket.emit('my other event', { my: 'data' });
  });
</script>

但现在感到困惑的是我如何获得客户请求的请求标头?实际上我想使用PHP进行开发和使用Node for RTN系统获取Client Cookie。现在因为我不知道如何让Request Header也无法获得cookie :(

更新我使用Memcache存储会话,这是我想获取cookie的主要原因,这样我就可以获得PHP的会话信息

2 个答案:

答案 0 :(得分:2)

如果您想在Node.js中获取PHP会话ID,那么只需使用此

即可
io.sockets.on("connection",function(client)
{   
    console.log(client.handshake.headers.cookie);
});

它将返回PHP会话ID。如果你没有使用上面提到的PHP页面和单独调用Node的方式,这可能会有所不同。上面命令的输出将是这样的

PHPSESSID=aj233jkjdfbk13adlljkwlkjjkj002

这是因为PHP设置了它的cookie并且你得到了headers.cookie,它返回了ID和PHP的会话ID。

答案 1 :(得分:0)

服务器生成的会话cookie具有“HTTPOnly”标志,您无法在客户端或任何其他服务器上读取它,您只能在原始服务器上读取它。客户端浏览器仅将会话cookie发送到原始服务器

因此,如果在PHP上使用mydomain.com并且您的Nodejs在mynode.com上,mynode.com将不会收到由mydomain.com生成的会话cookie

你需要在php和nodejs之间共享会话,看看这个: http://simplapi.wordpress.com/2012/04/13/php-and-node-js-session-share-redi/