【问题标题】:Logout doesn't clear the session, session.destroy doesn't works注销不清除会话,session.destroy 不起作用
【发布时间】:2018-05-31 16:34:10
【问题描述】:

我正在开发一个快速应用程序,我需要实现登录和注销。

我在登录期间使用以下代码创建了一个会话。

req.session.login_id = rows[0][0]["login_id"];
req.session.save(function(err) {
  if(err){
    console.log('Error in creating session.')
  }
  else  {
    res.redirect('/profile')
  }
})

但以下内容无法清除会话:

router.get('/logout',(req,res,next)=>{
  req.session.destroy(function (err) {
    if (!err){
      res.redirect('/')
    }else{
      return next(err)
    }
  })
})

【问题讨论】:

  • 您是否正在为会话中间件使用模块?如果有,那是什么?
  • 我正在使用 express-session
  • 您能否详细说明您说“无法清除会话”时的意思。你的意思是它不会清除服务器上的会话吗?
  • 登录和注销后,我们不需要用户名或密码来登录最后一个用户。一旦我们点击登录,它就会登录。
  • 我认为它不会清除服务器上的会话。首先,我使用 Firefox 登录和注销。然后在 chrome 中我尝试使用错误的凭据登录,它登录到最后一个从 Firefox 注销的用户。

标签: javascript node.js express-session


【解决方案1】:

我找到了问题的答案...

问题出在 MySql 查询中,用于登录的临时变量 (@login_id) 未初始化并用于包含垃圾值。

原来的查询是

SELECT login_id into @login_id from tbl_login WHERE email=in_email AND password=in_password AND status='active';

我改成

SET @login_id = NULL; SELECT login_id into @login_id from tbl_login WHERE email=in_email AND password=in_password AND status='yes';

现在@login_id 默认为 NULL,并且仅当用户有效时才包含值。

【讨论】:

    猜你喜欢
    • 2016-11-29
    • 2014-08-01
    • 2012-06-04
    • 2015-03-03
    • 2020-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多