【问题标题】:Update session variable in Node更新节点中的会话变量
【发布时间】:2020-12-20 02:10:10
【问题描述】:

我在登录时设置了一个名为 user 的会话变量:

req.session.authenticated_user = user;

当我稍后再次设置会话时,它不会更新:

req.session.authenticated_user = somenewvalue;

这仍将包含user 的原始值。应用模块:

var session = require('express-session');
var redisStore = require('connect-redis')(session);
var redisClient = redis.createClient();
const sessionMiddleware = session({ secret: 'foo' });

app.use(session({
  store: new redisStore({ client: redisClient }),
  secret: 'secretsession',
  resave: false,
  saveUninitialized: true,
  cookie: { secure: false, sameSite: true, expires: 7200000 }
}))

app.use('/users', sessionChecker, usersRouter);

我的路由器:

var express = require('express');
var router = express.Router();
var user_controller = require('../controllers/userController')
/* GET user update. */
router.get('/user_login/login', user_controller.user_login_get);

/* POST user update. */
router.post('/user_login/login', user_controller.user_login_post);

/* GET user update. */
router.get('/:username/update', user_controller.user_update_get);

/* POST user update. */
router.post('/:username/update', user_controller.user_update_post);

如何更新节点中的会话变量?

【问题讨论】:

  • 请显示您正在更新会话的实际路由处理程序代码(整个路由处理程序)。另外,请告诉我们您是使用默认内存存储还是其他存储进行快速会话,因为某些存储要求您调用 req.session.save() 来提交更改,或者您是否在异步完成回调中进行更改。
  • 正如我之前所问的,请在您尝试更新会话的位置显示实际的路由处理程序代码。并且,您是否尝试在修改会话后拨打req.session.save()

标签: node.js session


【解决方案1】:

在这里回答:Sessions won't save in Node.js without req.session.save()

如果req 是一个 Post 请求,req.session 不会自动更新。对于 Post 请求,必须调用 req.session.save(),除非数据通过 res.sendres.redirect 等发送出去。

【讨论】:

    猜你喜欢
    • 2017-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多