如何从浏览器检查节点会话cookie过期

时间:2014-03-11 19:01:06

标签: javascript node.js backbone.js cookies connect

我们正在使用Node + Connect来管理我们的应用程序的会话,这是一个使用Backbone.js构建的单页面应用程序(SPA)。我试图写一些代码,如果会话仍然有效,将从客户端检查。我知道我可以在Node本身做到这一点,但由于这是一个SPA,我需要能够完全在客户端完成。

我的第一个想法是用jQuery读取 connect.sid cookie,如果它不存在,则表示会话已过期。不幸的是,该会话cookie受 HttpOnly 标志的保护,这是有充分理由的。我不想禁用它。

我的第二个想法是每次写入 connect.sid cookie时写一个第二个并行 cookie。第二个cookie只存储会话cookie的过期日期,并将 HttpOnly 设置为false,以便客户端可以读取它。

  

所以我的问题是,如何编写第二个cookie, 是否有更好的解决方案能够从浏览器中检测会话过期状态?

     

我知道如何使用Node编写cookie,但我不知道在何处放置代码,以便每次Connect写入主 connect.sid 会话cookie时都会触发。另外,我想阅读会话cookie的过期日期,以便我可以在我的并行cookie中编写它。

更新:要明确,我不打算阅读会话的到期日期。我知道JS无法访问cookie的过期日期。我只是想知道cookie是否存在,因为它只有在它有效时才存在,因此它的缺失对我来说就足够了。

1 个答案:

答案 0 :(得分:1)

在评论澄清后更新

在会话中间件旁边添加另一个中间件。下面的摘录假设是明确的,但是如果你使用连接而没有表达,你应该能够相应地解释。

app.use(connect.session(sessionOptions));
app.use(function (req, res, next) {
   res.cookie("sessionIsAlive", "1", {
     //just make sure this matches your expiration time of the real session cookie
     expires: new Date(Date.now() + 900000),
     httpOnly: false
  });
  next();
});

然后你可以在浏览器中通过javascript检查是否存在。只有FYI connect会在每个响应中写入一个新的cookie和更新的到期时间。这是"在N分钟不活动后过期的情况"行为已经实施。