2017-08-08 38 views
0

我有幾個需求圍繞會話處理,我遇到了麻煩執行一個。如何禁止通過Express會話存儲的會話進行TTL刷新?

會話需要:

  1. 過期在30分鐘如果用戶已經不活動
  2. 在8小時內從過期時用戶先不管活動登錄。

我能夠配置項目1而不是項目2.每次用戶瀏覽應用程序時,cookie都會更新(時間+30分鐘)併發送回瀏覽器,但同時會話存儲TTL也刷新。最後一部分是我需要停下來的。

我相信TTL刷新是作爲快速會話的一項功能實現的。 Session.touch()被中間件調用,但是有一個設置會刪除這個動作嗎?

堆棧: 節點,快速,快速會話,connect-redis會話存儲。

配置:

app.use(session({ 
    store: new RedisStore({ 
    client: redis_client, 
    ttl: 28800 // 8 hours 
    }), 
    secret: config.redis_session_secret, 
    resave: false, 
    saveUninitialized: false, 
    cookie: { 
    path: '/', 
    httpOnly: true, 
    secure: false, 
    maxAge: 30 * 60 * 1000 //mins * seconds * milliseconds. session cookie will expire every 30 mins 
    }, 
    rolling: true 
})); 

回答

0

我不認爲選擇2爲明確會議的支持功能。因此,相反,您可以爲每個會話添加一個屬性,指明其開始時間,然後每10分鐘左右(可能在間隔計時器上),查詢該屬性超過8小時的所有會話並將其從數據庫。

您可以改爲實施檢查每個請求上的會話過期的中間件,並在會話發現會話超過8小時後刪除該會話。

您應該意識到,實施此行爲可能會導致用戶在使用應用程序的過程中丟失會話(這就是爲什麼它通常不以這種方式實現的原因)。

+0

是的,我也這麼想。我只是想看看是否有已經實施的方式來表達這一點。 –