【问题标题】:node.js session undefined when redis flushedredis刷新时node.js会话未定义
【发布时间】:2014-04-03 15:40:17
【问题描述】:

很可能解决方案是微不足道的,但我对文档并不幸运。 我正在使用express-session 中间件和connect-redis 会话存储,因此它将会话持久化到redis。

在我用FLUSHALL 刷新redis 之后,会话信息当然不再可用。然后,当我请求我的起始页时,会发送一个“旧的sid”,在redis 中找不到该快速会话,我最终得到req.session 未定义。这在一定程度上是有道理的——因为没有会话信息——但我不知道之后如何正确处理。

让我们进一步思考;如果用户在一周后没有返回,我的下一步将是从商店中删除旧会话(以释放随机流量空间)。因此,在那种情况下,当用户在 2 周后回来时,我会遇到同样的问题。

所以我的问题是,当它在 sessionstore 中找不到任何东西时,它为什么不创建一个新会话并发送一个新的 sid cookie?或者一个更好的问题而不是为什么,我怎样才能做到这一点?

req.session.regenerate() 是显而易见的方法,但由于req.sessionundefined,所以不能这样做:(

感谢您对这种情况的任何洞察!

/edit:这是我的会话代码;

var ExpressRedisStore = require('connect-redis')(express),
sessionStore = new ExpressRedisStore({
    client:redClient
}),
app = express();
//... <- some middleware
app.use(express.bodyParser( {hash : 'md5'} ));
app.use(cookieParser);
app.use(express.session({
    store: sessionStore,
    key: "sid",
    cookie:{
        path: '/',
        httpOnly: true,
        maxAge: 3600*24*1000 //one day!
    },
    trustProxy:true,
    rollingSessions:true
}));
app.use(userHandler.middleware()); //<-- my own middleware for userManagment
                                  // here I fail because req.session is undefined

【问题讨论】:

    标签: node.js session express connect session-management


    【解决方案1】:

    您的问题几乎可以肯定是您对 express-session 的使用。我不太清楚那个包是关于什么的(它似乎是一个未经授权的连接分支),但你不想使用它。 Express plus connect-redis 将做你想做的一切,包括在刷新缓存或过期时正确重新生成会话。

    更新:

    抱歉,我错过了 Express/Connect 正在进行重大重构。不过目前npm上Express的发布版本是3.4.8,其中requires连接2.1.2,没有使用express-session。因此,请尝试以下方法以使您的项目正常运行:

    npm uninstall --save express
    npm uninstall --save express-session
    npm install --save express
    npm install --save connect-redis
    

    这应该可以让您正常安装,您可以按照此connect link 获取正确的自述文件。

    【讨论】:

    • 感谢您的回答,但 express-session 是从连接 repo (github.com/senchalabs/connect) 链接的内容,并且由于 express 基于 connect,我很确定这是您在进行 express 时得到的。会议。所以这已经是你所提议的了。你有别的想法吗? -> 请参阅上面的会话设置
    • 我认为我遇到了问题,因为此时模块正在更新并发布到 npm。我明天再来看看。感谢您的更新。我会及时通知你
    猜你喜欢
    • 2017-11-16
    • 2012-05-08
    • 2012-04-28
    • 2016-08-31
    • 1970-01-01
    • 1970-01-01
    • 2021-02-13
    • 2016-09-07
    • 2013-07-10
    相关资源
    最近更新 更多