首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在socket.io中访问NodeJS上的cookie会话中间件?

如何在socket.io中访问NodeJS上的cookie会话中间件?
EN

Stack Overflow用户
提问于 2014-11-27 15:55:38
回答 2查看 2.9K关注 0票数 1

我决定在我的应用程序中使用socket.io,并偶然发现了一个问题。我使用cookie-session进行明确授权:

代码语言:javascript
复制
var session = require('cookie-session');
var app = express();
// ...
app.use(session({
  keys: ['secretkey1', 'secretkey2']
}))
// ...
app.get('/settings', function(req, res) {
    res.type("html");

    if (!req.session.sid)    {
        console.log("NO SID");
        req.session.sid = util.randomString();
    }
    else {
        console.log("sid:" + req.session.sid);
    }

    // doing stuff with req.session.sid

    var jadeView = { /*...*/ };
    res.status(200).send(mainJade(jadeView));
});

现在我使用socket.io。我想出了如何访问曲奇:

代码语言:javascript
复制
io.sockets.on('connection', function(socket) {
    var cookie_string = socket.request.headers.cookie;
    console.log("cookies: " + cookie_string);
// ...
}

但是如何将cookie_string转换为会话对象,如在req.session

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-26 15:43:39

是什么改变了

@rmflow 2014年的答案在2017年似乎不适用于socket.io-client 2.0.2和曲奇会话 2.0.0

显然,曲奇饼包(cookie-session的主要依赖项)需要一些不同的请求和响应对象。也就是说,请求对象应该有一个带有布尔connection属性的encrypted对象;此外,响应对象应该具有getHeadersetHeader方法。

更新解决方案

代码语言:javascript
复制
const session = require('cookie-session')({
    name: 'some-session-name',
    secret: 'some-session-secret', // or an array of keys as usual
    ... // Other relevant options
});

io.on('connection', socket => {
    let cookieString = socket.request.headers.cookie;

    let req = {connection: {encrypted: false}, headers: {cookie: cookieString}}
    let res = {getHeader: () =>{}, setHeader: () => {}};
    //
    session(req, res, () => {
        console.log(req.session); // Do something with req.session
    })
})
票数 2
EN

Stack Overflow用户

发布于 2014-11-28 15:15:57

我自己弄明白了:

代码语言:javascript
复制
var req = { headers : {cookie : cookie_string} }
session({ keys: ['secretkey1', 'secretkey2'] })(req, {}, function(){})
console.log(req.session.sid);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27174566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档