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;
})