socket.io验证挂载session

socket.io 1.0验证挂载session

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//验证设置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

1
2
3
4
5
6
io.sockets.on("connection", function (socket) {
//获取用户session
var _name=socket.request.session.user.name;
})