javascript - 为什么我刷新页面时会得到一个新的 session (我在save()之后创建了 session )

标签 javascript node.js session express

我认为 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/

相关文章:

Java - Servlet,在整个项目中携带登录信息( session bean)

javascript - Ext JS - Store 与 JsonStore

node.js - TypeScript 编译错误,导入带花括号的非默认接口(interface)

javascript - 如何将两条不同的路由映射到同一个路由器

session - 如何在 Symfony 操作中获取 session ID?

session - Magento 购物车 : Check for items empties cart

javascript - HighCharts - 来自一个 xAxis 中不同间隔的数据(隐藏第二个 xAxis)

javascript - 使用分组按钮动态更改和重置菜单名称

JavaScript 字段继承奇怪的行为

node.js - Nodejs - 检查 MongoDB 中的空对象并解析它