【发布时间】:2016-08-18 22:30:19
【问题描述】:
我有一个基于 express、express-session 和 ws 构建的应用程序(用于 websocket 支持)。
我已使用此代码启用会话中间件:
app.use(session({secret: 'mysecret',resave: true,saveUninitialized: true,cookie: {}}));
我可以在 get 处理程序中读取和保存会话变量:
app.get('/', function (req, res) {
res.send('Hello World!');
console.log(req.session.test);
req.session.test="OK";
req.session.save();
});
(第一次打印“未定义”,第二次按预期打印“OK”)
现在我在同一个应用程序中也有一个由 express 处理的 websocket 服务器,我想在 ws.on("connection",...) 和 ws.on("message",...) 中获取 req.session 对象。
问题是没有对原始req 对象的引用,只是对upgradeReq 的引用,它是websocket 的连接处理程序的包装器。
检查此 upgradeReq 我可以在 ws.upgradeReq.headers.cookie 中找到包含会话 cookie 值的 connect.sid。
wss.on('connection', function connection(ws) {
var location = url.parse(ws.upgradeReq.url, true);
console.log(ws.upgradeReq.headers.cookie);
//....
});
在我的想法中,有可能以某种方式从中获得原始的req.session。
我怎样才能做到这一点?
【问题讨论】:
标签: node.js session express websocket express-session