簡體   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