在快速会话中保存数据:res.render() vs res.send()
save data in express-session: res.render() vs res.send()
各位。我对会话管理有疑问。
这是我的"express-session"配置(app.js):
app.use(session({
secret: "I love pizza...",
resave: true,
saveUninitialized: true
}));
当用户登录时,我像这样在req.session中存储了一些'attributes'(controller.js):
exports.login = function (request, response) {
request.session.username = 'admin';
response.render('pages/home', {
title: "home",
username: request.session.username
});
}
它向我显示 'home' 页面,其中包含 'menu' 和其他 link。一个 link 有一个 'href' 重定向到“仪表板”页面:
<a class="nav-link active d-flex align-items-center nav-link-2"
href="/dashboard">
<span>Dashboard</span>
</a>
它被路由到routes.js:
function sessionChecker (req, res, next) {
if (req.session && req.session.username) {
next();
} else {
res.redirect('/login');
}
};
app.get('/dashboard', sessionChecker, home.evaluacion_dash);
嗯,问题是 sessionChecker 方法,变量 req.session.username 不存在。
另一方面,如果我将 response.render 替换为 response.send方法,像这样:
response.send('login success!!!');
它显示带有文本的页面:'login success!!!' 如果我在地址栏中(手动)写入:'http://localhost:3000/dashboard',变量 req.session.username 存在于 sessionChecker 方法中....
关于 express-session 中配置的任何建议或能够持久保存 'username' 的其他替代方法?
附加信息:
节点版本:8.9.3,
表达版本: 4.13.1,
快速会话版本: 1.15.6
此致!
我的第一个意见是使用为您处理 sessionChecker 的 passportjs。
也许你必须在这里更改resave和saveUninitialized
app.use(session({
key: 'session_cookie_name',
secret: 'session_cookie_secret',
resave: false,
saveUninitialized: false
}));
谢谢@Shadow,只需添加"key"参数即可!!!
各位。我对会话管理有疑问。
这是我的"express-session"配置(app.js):
app.use(session({
secret: "I love pizza...",
resave: true,
saveUninitialized: true
}));
当用户登录时,我像这样在req.session中存储了一些'attributes'(controller.js):
exports.login = function (request, response) {
request.session.username = 'admin';
response.render('pages/home', {
title: "home",
username: request.session.username
});
}
它向我显示 'home' 页面,其中包含 'menu' 和其他 link。一个 link 有一个 'href' 重定向到“仪表板”页面:
<a class="nav-link active d-flex align-items-center nav-link-2"
href="/dashboard">
<span>Dashboard</span>
</a>
它被路由到routes.js:
function sessionChecker (req, res, next) {
if (req.session && req.session.username) {
next();
} else {
res.redirect('/login');
}
};
app.get('/dashboard', sessionChecker, home.evaluacion_dash);
嗯,问题是 sessionChecker 方法,变量 req.session.username 不存在。
另一方面,如果我将 response.render 替换为 response.send方法,像这样:
response.send('login success!!!');
它显示带有文本的页面:'login success!!!' 如果我在地址栏中(手动)写入:'http://localhost:3000/dashboard',变量 req.session.username 存在于 sessionChecker 方法中....
关于 express-session 中配置的任何建议或能够持久保存 'username' 的其他替代方法?
附加信息: 节点版本:8.9.3, 表达版本: 4.13.1, 快速会话版本: 1.15.6
此致!
我的第一个意见是使用为您处理 sessionChecker 的 passportjs。
也许你必须在这里更改resave和saveUninitialized
app.use(session({
key: 'session_cookie_name',
secret: 'session_cookie_secret',
resave: false,
saveUninitialized: false
}));
谢谢@Shadow,只需添加"key"参数即可!!!