socket.io验证挂载session

socket.io 1.0验证挂载session

根据客户端的cookie中的connect.sid获取服务端中的session服务端采用的是mongodb-session获取失败返回callback(err,false);获取成功返回callback(null,true);

//验证设置session 
  io.set("authorization", function (handshakeData, callback) { 
      //解析cookie 
      handshakeData.cookie = cookie.parse(handshakeData.headers.cookie) 
      console.log(handshakeData.cookie) 
      var sessionid = handshakeData.cookie['connect.sid'] 
      if (sessionid) { 
          var sid = sessionid.split(':')[1].split('.')[0]; 
          //用mongodb查询语法 
          mongoose.connection.db.collection("sessions", function (err, collection) { 
              collection.find({_id: sid}).toArray(function (err, results) { 
                  if (err) { 
                      callback(err, false) 
                  } else { 
                      handshakeData.session = JSON.parse(results[0].session) 
                      console.log(23, handshakeData.session) 
                      callback(null, true) 
                  } 
              }); 
          }); 
      } 
  }) 

注意其中的handshakeData.session = JSON.parse(results[0].session)这段就是给socket挂载上一个session属性 这样是行得通的 但是要在socket获取不能采用socket.handshake.session而要采用socket.request.session

io.sockets.on("connection", function (socket) { 

    //获取用户session 
    var _name=socket.request.session.user.name; 

})