【问题标题】:Node js ejs session not closing/opening correctly [duplicate]Node js ejs会话未正确关闭/打开[重复]
【发布时间】:2020-05-21 19:02:04
【问题描述】:

我有一个使用 node 作为后端的简单应用程序。每当用户登录时,我使用 cookie 来存储会话,当他们退出时,我删除该 cookie,此外,我使用 ejs 向用户显示某些数据(例如他们的用户名)。

问题是,无论出于何种原因,当我在未登录的情况下进入视图(例如,索引页面)时,在登录后,该视图会显示为好像我没有登录(例如,用户name 不存在),但其他视图就像我一样存在(cookie 在两种情况下都存在);此外,在退出后,我在登录时呈现的视图仍然呈现为好像我是,而另一个则不是(在这种情况下,cookie 不存在)。

我可能认为这与 node/ejs/browsers 如何渲染事物有关,可能会将某些内容存储在缓存中,并且他们甚至不会费心再次请求它(在登录/退出之后),但这会破坏所有前端的登录,因为它假定用户在没有登录/退出时被登录。

我可以做些什么来强制重新加载视图,从而检查我解释的内容是否正在发生?

编辑:我的注销代码如下:

后端:

router.get('/logOut',verifiyLogin, async (req, res) =>{
    res.clearCookie('cookie');
    return res.status(200).send();
});

前端;

  $.ajax({
            url: url+"/logOut",
            type: "get",
            success: function(response) {
                window.location.assign('/');
            },
            error: function(xhr) {
                alert('Error: '+xhr.response);
            }
        });

【问题讨论】:

  • 可能是浏览器端页面缓存。在浏览器 devtools 的 Network 选项卡中查找 302 状态代码。
  • @O.Jones 不,我检查了一下,没有返回 302。都是 200。
  • @O.Jones 看起来可行,谢谢。

标签: node.js session-cookies browser-cache


【解决方案1】:

您能否添加您的登录和退出代码。 我正在与您分享我的方法可能会对您有所帮助。 我正在使用 express-session 和 cookie-parser。 注销时,我正在销毁会话并从响应中删除 cookie。

req.session.destroy(function(err) {
   res.clearCookie('yourCookieName');
   res.redirect('/yourDestinationRoute'); 
});

【讨论】:

  • 已添加。如您所见,几乎相同。
猜你喜欢
  • 2013-05-11
  • 2020-11-14
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 2020-03-15
相关资源
最近更新 更多