快速会话未保存

LUK*_*KER 0 node.js express express-session

我知道其他人也遇到过这种情况,但我的 Express 会话没有保存。我浏览了尽可能多的问题和线索,但找不到解决办法。请让我知道我做错了什么。谢谢!

这是它的初始化位置:

app.use(session({
  secret: 'BigSecret',
  resave: true,
  cookie: {
    maxAge: 24 * 60 * 60 * 1000 * 7, //seven days
    secure: false
  },
  saveUninitialized: true
}));
Run Code Online (Sandbox Code Playgroud)

以及它在路线中使用的位置:

router.get('/route', async (req, res) => {
    if (!req.session.views) {
        req.session.views = 0;
    } else {
        req.session.views++
    }
    console.log(req.session);

    ...the rest of the route...

    res.render('pages', {
        key: val,
        anotherKey: anotherVal
    }
});
Run Code Online (Sandbox Code Playgroud)

另外,对于某些上下文,我返回一个渲染的 EJS 页面,这就是最后渲染的内容。

dav*_*ell 6

问题可能出在这段代码中:

\n
if (!req.session.views) {\n  req.session.views = 0;\n} else {\n  req.session.views++;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

第一个请求的值req.session.views将为undefined,因此!req.session.views将计算为true并且您\xe2\x80\x99ll 将值设置为0.

\n

下一个请求以及此后的每个请求, 的值req.session.views将是0。每次!0都会评估为true,您\xe2\x80\x99只需再次将该值设置为0

\n

您可能想将其更改为类似的内容if (!(\'views\' in req.session))if (typeof req.session.views === \'undefined\')

\n

或者,您可能希望只设置req.session.views = 1;第一个请求,因为这是第一个视图。然后,在第二个请求中,!req.session.views它将!1计算为false,并且您的值将增加。

\n