我认为 session 是在用户计算机上保留信息,直到它过期或我销毁它。我想要做的是,如果用户是匿名的,为他创建一个 id,将其放入 session 中,并且他每次访问网站或单击时,我都可以通过 id 将内容存储在属于匿名用户的数据库记录中。
我使用中间件来检查用户是否在每次路由中都使用护照登录,如果没有,我想创建req.session.anon
。我将 req.session.anon
分配给保存 anon 时创建的 ObjectId(请参阅代码)。第二次(页面刷新)用户应该有一个 session.anon id,所以这次检查应该失败 }else if(!req.session.anon){
但它没有,我创建了另一条记录使用新 ID。
app.use(function(req, res, next){
// console.log("req.user :::: ", req.user.local.username)
if(req.user){
app.locals.userid = req.user._id;
app.locals.username = req.user.local.username;
console.log("req.user is there")
}else if(!req.session.anon){
var anon = new Anon()
anon.save(function(err, data){
console.log(data)
req.session.anon = data._id
console.log("req.session.anon " , req.session.anon);// prints out the ID
})
}
next();
});
session 设置
app.use(session({secret : "thisisastring",
saveUninitialized : true,
resave : true
}));
编辑我认为现在它与回调中设置req.session.anon = data._id
有关。但 req.session 是从控制台设置的
最佳答案
session 通常通过 cookie 与浏览器关联。
使用 fiddler 查看 session cookie 是否已写入响应流,以及 cookie 是否与下一个请求一起发回。
也许您需要将 next() 移至初始 if 子句中并移至 else..save 回调方法的底部,以确保 session 在关闭之前附加到响应。
关于javascript - 为什么我刷新页面时会得到一个新的 session (我在save()之后创建了 session ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38235959/