【问题标题】:Unable to store and manage session in express无法快速存储和管理会话
【发布时间】:2022-01-26 10:06:15
【问题描述】:

我是新来表达和使用 express-session 来管理我的应用程序中的登录。 我关注了一个博客并宣布我的会话如下:-

app.use(session({
secret:'Keep It Secret',
name : 'uniqueSessionID',
resave : true,
saveUninitialized : true,
cookie : { secure : false, maxAge : 3600000, loggedIn : false, username : "" }
}));

问题是在成功登录时我正在更新会话并打印它,它输出到:-

    Session {
  cookie: {
    path: '/',
    _expires: 2021-12-27T13:16:17.355Z,
    originalMaxAge: 3600000,
    httpOnly: true,
    secure: false,
    loggedIn: true,
    username: 'pushkar@gmail.com'
  }
}

但在那之后,当我验证路由时,会话保持不变,如下所示:-

    Session {
  cookie: {
    path: '/',
    _expires: 2021-12-27T13:16:17.355Z,
    originalMaxAge: 3600000,
    httpOnly: true,
    secure: false
  }
}

我已经尝试了所有方法,需要帮助。

这是我登录并进行会话的登录名:-

const login = (req, res, next) => {
console.log(req.body);
const email = req.body.email;
const password = req.body.password;

if(email == "" && password == ""){
    req.flash("message","please fill in the required fields");
    res.redirect("/admin/login");
}
else if(email == ""){
    req.flash("message", "please fill in the email");
    res.redirect("/admin/login");
}
else if(password == ""){
    req.flash("message", "please fill in the password");
    res.redirect("/admin/login");
}
else {
    user.findOne({email : email}, function(err, data){
        debugger;
        if(err){
            req.flash("message", "Username not found");
            res.redirect("/admin/login");
        }
        else {
            if(data.password == password){
                req.session.cookie.loggedIn = true;
                req.session.cookie.username = email;
                req.session.save(function(err) {
                    if (err) console.log(err);
                })
                console.log(req.session);
            }
            else{
                req.flash("message", "Invalid Password");
                res.redirect("/admin/login");
            }
            res.redirect("/admin/dashboard");
        }
    })
}

};

这是我的身份验证功能:-

exports.authenticated = (req, res, next) => {
debugger;
console.log(req.session);
if(req.session.cookie.loggedIn) {
    next();
}
else {
    res.redirect("/admin/login");
}
}

【问题讨论】:

    标签: node.js express session express-session


    【解决方案1】:

    设置值不正确,要保存到req.session.cookie它设置uniqueSessionIDcookie选项的地方,不是保存值。

    this tutorial for example

    试试

    //to write
    req.session.loggedIn = true;
    req.session.username = email;
    
    //to read
    if(req.session.loggedIn) {
        next();
    }
    

    如果一切正常,也许您希望在重新启动之间使会话永久化,请参阅下一个 Example with permanent storage

    【讨论】:

    • 抱歉回复晚了!并感谢您的回答。 :-)