Ris*_*vik 5 session node.js express
我目前正在使用此堆栈expres,socket.io,sessionstore.我按照这里的文章http://www.danielbaulig.de/socket-ioexpress/.那么问题是我无法修改socket.io回调中的会话值.
快递方面的访问效果很好,每次刷新后项目都会增加.
app.get('/mysession', function(req, res) {
req.session.item++;
console.log(req.session);
res.render('session.jade', {
title: 'Sample title'
});
});
Run Code Online (Sandbox Code Playgroud)
在socket.io方面使用它没有,这是问题,也许我设置了错误的对象.
var io = io.listen(app);
io.sockets.on('connection', function(socket) {
var handshake = socket.handshake;
onlineCount++;
console.log('Well done id %s', handshake.sessionID);
handshake.session.item++;
console.log(handshake.session);
});
Run Code Online (Sandbox Code Playgroud)
这是桥码.
io.set('authorization', function(data, accept) {
if (data.headers.cookie) {
data.cookie = parseCookie(data.headers.cookie);
data.sessionID = data.cookie['express.sid'];
sessionStore.get(data.sessionID, function(err, session) {
if (err || !session) {
accept('Error', false);
} else {
data.session = session;
accept(null, true);
}
});
} else {
return accept('No cookie tansmitted', false);
}
});
Run Code Online (Sandbox Code Playgroud)
我发现实现这项工作的唯一方法是从事件的请求对象中获取 cookie connect,用您最喜欢的 cookie 解析器(我使用)解析它connect.utils.parseCookie,并将其设置在该套接字上,以便我可以在将来的事件中访问它:
socket.on('connection', function(client) {
var cookie = client.request.headers.cookie;
var pcookie = connect.utils.parseCookie(cookie);
var session_id = pcookie["connect.sid"];
if (session_id) {
sessionStore.get(session_id, function(err, sess) {
// do whatever you want with sess here
// ...
// if you want to "save" the session for future events
client.set('session_id', session_id);
}
}
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2514 次 |
| 最近记录: |