我目前正在Express Js中编写一个网站。我需要为我的用户创建一个登录页面,然后在持久会话中存储一些信息。
为此,我决定使用express-session和session store connect-redis。
现在,我可以创建一个会话,但是当我刷新或移动到另一个页面时,会话就会消失。
我的Redis服务器(在开发时我的窗口上)位于地址:localhost:6379
并且运行正常。
app.js:
var session = require('express-session');
var RedisStore = require('connect-redis')(session);
var redis = require("redis").createClient();
var login = require('./routes/login');
.....
// express session
app.use(session({
store: new RedisStore({ host: 'localhost', port: 6379, client: redis, ttl: 260 }),
secret: 'sqdsqdfqszvrqsdrvqsrfvqsefqcrqs',
resave: false,
saveUninitialized: true
}));
app.use('/login', login);

login.js(创建会话的帖子):
router.post('/', [..(validators)..], (req, res, next) => {
const errors = validationResult(req);
req.session.user = user;
res.redirect('/login');
});

login.js(如果会话存在,则获取测试):
router.get('/', function(req, res, next) {
console.log(req.session.user);
res.render('login', { title: 'login' });
});

我想我错过了什么,你能帮助我吗?
答案 0 :(得分:0)
好的,我发现了我的错误,请不要像我在get方法中那样使用res.redirect('/login');
而是使用res.render('/login', { title: 'login'});
。当您重定向时,会话不会被存储,但是当您渲染它时它会起作用。
全部;)