Node.js 没有express.js的Socket.io会话?

Node.js 没有express.js的Socket.io会话?,node.js,session,express,websocket,socket.io,Node.js,Session,Express,Websocket,Socket.io,我想通过node.js在WebSocket上进行会话处理,而不必使用cookie和避免使用express.js,因为应该还有一些客户端不在浏览器环境中运行。有人已经这样做了,或者在概念验证方面获得了一些经验?这应该会有所帮助 您可以跟踪所有会话变量,并使用握手数据中的以下组合唯一标识用户 { headers:req.headers//请求的头 ,时间:(新日期)+''//连接的日期时间 ,地址:socket.address()//remoteAddress和remotePort对象 ,xdoma

我想通过node.js在WebSocket上进行会话处理,而不必使用cookie和避免使用express.js,因为应该还有一些客户端不在浏览器环境中运行。有人已经这样做了,或者在概念验证方面获得了一些经验?

这应该会有所帮助

您可以跟踪所有会话变量,并使用握手数据中的以下组合唯一标识用户

{
headers:req.headers//请求的头
,时间:(新日期)+''//连接的日期时间
,地址:socket.address()//remoteAddress和remotePort对象
,xdomain:!!headers.origin//是跨域请求吗?
,secure:socket.secure//https连接
,发出:+日期//创建握手的时间
,url:request.url//请求的入口路径
,query:data.query//url.parse()的结果。查询或空对象
}
此示例也可能有所帮助,只要让非浏览器客户端以不同的方式提供信息即可:


在建立socket.io连接之前,有一种握手机制,默认情况下,所有正确传入的请求都会成功握手。但是,有一种方法可以在握手过程中获取套接字数据,并根据您的选择返回true或false,该选择接受或拒绝传入的连接请求。下面是socket.io文档中的示例:

因为握手数据是在授权之后存储的,所以您实际上可以从该对象添加或删除数据


回调函数的第一个参数是error,您可以在这里提供一个字符串,如果没有设置为null,它将自动拒绝客户端。第二个参数是布尔值,无论您是否接受传入的请求。

的示例不使用express,但我想您已经知道了。您还需要什么其他信息?如果我可以在客户端的req.headers中添加sessionid并在授权时验证,这一点很好。因此,我必须编写一个独立的sessionhandler,它与req和res变量解耦。也许我可以使用连接会话作为代码库,以兼容会话存储和其他东西。您知道如何在客户端向标题添加值吗?一旦我的websocket连接被授权,它是否像一个http请求始终验证他的会话一样安全?
{
   headers: req.headers       // <Object> the headers of the request
 , time: (new Date) +''       // <String> date time of the connection
 , address: socket.address()  // <Object> remoteAddress and remotePort object
 , xdomain: !!headers.origin  // <Boolean> was it a cross domain request?
 , secure: socket.secure      // <Boolean> https connection
 , issued: +date              // <Number> EPOCH of when the handshake was created
 , url: request.url          // <String> the entrance path of the request
 , query: data.query          // <Object> the result of url.parse().query or a empty object
}
var io = require('socket.io').listen(80);

io.configure(function (){
  io.set('authorization', function (handshakeData, callback) {
    // findDatabyip is an async example function
    findDatabyIP(handshakeData.address.address, function (err, data) {
      if (err) return callback(err);

      if (data.authorized) {
        handshakeData.foo = 'bar';
        for(var prop in data) handshakeData[prop] = data[prop];
        callback(null, true);
      } else {
        callback(null, false);
      }
    }) 
  });
});