我要做什么:因此,我正在使用会话临时存储登录信息。一个人登录时,其登录数据被写入 req.session对象的'loginInfo'属性。当同一用户重新加载页面时,只要他的会话未过期,我希望该表单使用其req.session中的数据进行预填充。
//function to check if the user has a loginInfo object in his session
function isLogged(req){
if(req.session){
if(req.session.loginInfo){
return true;
}
}
return false;
}
//setting up the routes
app.get('/' , (req, res) => {
console.log(req.session.loginInfo); //for debugging
if(isLogged(req)) io.on('connect', socket => {
socket.emit('isLogged', req.session.loginInfo); //and my loginInfo schema = {loginName : String, loginEmail : String}
});
res.render('index');
});
我正在向客户端套接字发出事件“ isLogged”,以发送登录信息。在客户端,我遵循以下代码来处理传入的数据。
socket.on('isLogged', loginInfo => {
loginName.value = loginInfo.loginName; //populating the input fields of the form
loginEmail.value = loginInfo.loginEmail;
});
问题:当我从数据库中删除会话时(我正在使用Express-Sessions),无论是显式还是等待其过期(将其设置为2分钟) ,然后重新加载页面。其他一切工作正常,响应标头中应有set-cookie,应该是上面的代码,我在上面的代码中登录到控制台的'req.session.loginInfo'对象抛出未定义的内容。
但是表单仍然填充有登录信息。就像它从哪里得到一样,我已经从数据库中删除了该死的会话。我最好的猜测是我使用socket.io发送loginInfo的方式有问题。有什么我想念的吗?请帮忙。