【问题标题】:setting session data in nodejs express socket.io在 nodejs express socket.io 中设置会话数据
【发布时间】:2013-10-12 14:45:30
【问题描述】:

我正在尝试以下从互联网收集的代码

var io = require('socket.io'),
express = require('express'),
app = express(),
server = require('http').createServer(app),
connect = require('express/node_modules/connect');

var RedisStore = require("connect-redis")(express);
var sessionStore = new RedisStore()

var sessionSecret = 'sexret';
var sessionKey = 'sexpress.sid';
var sioCookieParser = express.cookieParser(sessionSecret);

app.configure(function() {
   app.use(connect.cookieParser());
   app.use(connect.session({ store: sessionStore, secret: sessionSecret, key: sessionKey }));
   app.use(express.static(__dirname + '/public'));
});

var sio = io.listen(server);

sio.set('authorization', function(data, accept) {
   sioCookieParser(data, {}, function(err) {
      if (err) {
        accept(err, false);
      } else {
        sessionStore.get(data.signedCookies[sessionKey], function(err, session) {
            if (err || !session) {
                accept('Session error', false);
            } else {
                // I'm trying to set data in to the session

                if (session.yyy) {
                    session.yyy += 1;
                } else {
                    session.yyy = 0;
                }

                console.log("%j", session);

                // But it never set

                data.session = session;
                data.sessionId = data.signedCookies[sessionKey];
                accept(null, true);
            }
        });
      }
  });
});

server.listen(1337);

我也试过了,但是效果不好,

sessionStore.get(data.signedCookies[sessionKey], function(err, session) {
  if (err || !session) {
    accept('Session error', false);
  } else {

    if (session.yyy) {
        session.yyy += 1;
    } else {
        session.yyy = 0;
    }

    console.log("%j", session);

    sessionStore.set(data.signedCookies[sessionKey], session, function(err, session) {

       data.session = session;
       data.sessionId = data.signedCookies[sessionKey];
       accept(null, true);

    });
  }

});

我应该如何将数据设置到会话中?

【问题讨论】:

  • 你找到解决方案了吗?
  • 是的,上面的代码几乎可以工作,只是一些我不记得的愚蠢的错字

标签: node.js session express socket.io


【解决方案1】:

看起来 sessionId 应该是 sessionID 正如 Morgan 在此答案中提到的那样:

https://stackoverflow.com/a/9676844/80122

【讨论】:

    猜你喜欢
    • 2016-12-17
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 2023-03-15
    • 2016-02-28
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多