在nodeJS中获取SESSIONID

时间:2013-04-17 12:38:04

标签: node.js express socket.io sessionid

现在,在使用nodejs和socket.io几个小时后,我遇到了更多问题 - 一个是,我需要在node.js中获取sessionID,使用app.get('/' ...进行whitout - 因为socket.io连接时该事件似乎没有触发,所以它只会触发.on('connection', function( ...

var express = require('express')()
express.set('port', process.env.PORT || 8080)

var server = require('http').createServer(express)
var socket = require('socket.io').listen(server)

server.listen(express.get('port'))

// this event is fired, get('/', ... isnt!
server.on('connection', function(stream) {
    // ??
} )

当用户登录时,会话最初由PHP应用程序创建。会话数据存储在数据库中,我需要访问该数据的密钥是SESSION ID。什么是最简单的方法?如上所述,我发现了几个使用app.get('/' ...的示例,但我根本无法触发该事件。

感谢。

1 个答案:

答案 0 :(得分:1)

如果会话数据存储为cookie(最有可能),那么您应该能够在套接字握手期间重新解析该数据。我在this answer上发布了代码,但也复制了代码:

io.configure(function () {
  io.set('authorization', function (handshakeData, callback) {

    var cookie = handshakeData.headers.cookie;

    // parse the cookie to get user data...

    // second argument to the callback decides whether to authorize the client
    callback(null, true);
  });
});

如果会话数据在网址中传播,那么您可以从handshakeData.urlhandshakeData.query收集此信息。你可能不得不做自己的实验。