繁体   English   中英

如何从浏览器检查Node会话cookie到期

[英]How to check Node session cookie expiration from browser

我们正在使用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是否存在,因为它只有在有效时才存在,因此缺少它对我来说是足够的数据。

在评论澄清后更新

在会话中间件旁边添加另一个中间件。 下面的摘录假定为表达,但是如果您使用的是没有表达的连接,那么您应该能够做出相应的解释。

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分钟不活动后过期”行为的方式。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM