Blu*_*ueS 2 session redis node.js
我有登录功能
app.post('/doLogin', function(req,res){
db.users.findOne({username: req.body.username}, function(err, user) {
if( err ) {
console.log("Login fail");
}
else if (user != null) {
if (req.body.password == user.password) {
req.session.user_role = "user";
req.session.save();
} else {
req.session.user_role = "null";
console.log("Wrong login");
}
}
res.send({redirect: "/"});
});
});
Run Code Online (Sandbox Code Playgroud)
此函数用于将变量保存到会话中req.session.user_role = "user";
但是当新请求检查用户是否登录时
app.get('/', function(req,res){
redis.get('sess:' + req.session.id, function(err, result){
console.log("Get session: " + util.inspect(JSON.parse(result),{ showHidden: true, depth: null }));
});
if ((req.session.user_role == "user")) {
console.log("Logged in");
} else {
console.log("Logged out");
}
});
Run Code Online (Sandbox Code Playgroud)
然后返回始终为"已注销",因为会话已更改.我使用Redis存储会话,我认为这是Redis故障,因为当我停止使用Redis时,它可以帮助我!
Nir*_*rus 15
Express-session使用cookie来设置或从客户端获取会话ID
请注意,secure:true是推荐选项.但是,它需要启用https的网站,即安全cookie需要HTTPS.如果设置了安全,并且您通过HTTP访问您的站点,则不会设置cookie.
请记住以下几点:
如果您未在HTTPS连接上托管,则应将安全标志设置为false.
如果您使用的是HTTPS上托管的代理,则应将信任代理设置为1.请参阅文档
cookie: { secure: false }
Run Code Online (Sandbox Code Playgroud)
例如:
app.use(session({
// your settings
cookie: { secure: false }
}))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8173 次 |
| 最近记录: |