Expressjs + socket.io +快递会话 [英] Expressjs+socket.io+express-session
问题描述
var app = require('express')(),
session = require('express-session'),
cookie = require('cookie'),
cookieParser = require('cookie-parser'),
manager = './sockets/manager');
var sessionStore = new session.MemoryStore();
app.use(cookieParser('secret'));
app.use(session({
name:'sid',
store:sessionStore,
secret:'secret',
saveUninitialized:true,
resave:true,
cookie:{
path:'/',
httpOnly:true,
secure:false,
maxAge:null
}
}));
var server = require('http')。Server(app).listen(8888),
io = require('socket.io')(server);
io.use(function(socket,next){
var data = socket.request;
if(data.headers.cookie){
data.cookie = cookie.parse(cookieParser.signedCookie(data.headers.cookie,'secret'));
console.log('data.cookies(%s)',JSON.stringify (data.cookie));
// print'io = id_place',cookie没有sid,为什么?
if(data.cookie.sid){
data.sid = request.cookie.sid;
sessionStore.get(request.cookie.sid,function(err,session){
request.session = session;
});
}
}
next();
});
manager.use(io);
控制台日志向我显示此cookie request.cookies({io:1HKSseNH5UrnJisSAAAA})。
我刚刚看到很多例子与expressjs 3和socket 0.9,但我有:
socket.io: ^ 1.0.6,
express:〜4.5.1,
express-session:〜1.6.4
,它不起作用。
有任何错误吗?
我为您创建了解决方案:在此输入链接说明。正如你可以看到套接字对象具有握手属性,其中包含带有cookie的请求头。
I have this code in my server.js.
var app = require('express')(),
session = require('express-session'),
cookie = require('cookie'),
cookieParser = require('cookie-parser'),
manager = require('./sockets/manager');
var sessionStore = new session.MemoryStore();
app.use(cookieParser('secret'));
app.use(session({
name: 'sid',
store: sessionStore,
secret: 'secret',
saveUninitialized: true,
resave: true,
cookie: {
path: '/',
httpOnly: true,
secure: false,
maxAge: null
}
}));
var server = require('http').Server(app).listen(8888),
io = require('socket.io')(server);
io.use(function(socket, next) {
var data= socket.request;
if (data.headers.cookie) {
data.cookie = cookie.parse(cookieParser.signedCookie(data.headers.cookie, 'secret'));
console.log('data.cookies ( %s )', JSON.stringify(data.cookie));
// print 'io=id_place', cookies doesn't have sid, why?
if (data.cookie.sid) {
data.sid = request.cookie.sid;
sessionStore.get(request.cookie.sid, function(err, session) {
request.session = session;
});
}
}
next();
});
manager.use(io);
Console log shows me this cookie request.cookies ( {"io":"lHKSseNH5UrnJisSAAAA"} ). I've just seen many examples with expressjs 3 and socket 0.9, but I have:
"socket.io": "^1.0.6", "express": "~4.5.1", "express-session": "~1.6.4"
and it doesn't work.
Have I any mistakes?
I've created solution for you: enter link description here. As you can see socket object has handshake property which include request headers with cookie.
这篇关于Expressjs + socket.io +快递会话的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!