2013-02-13 75 views
10

在ServiceStack的認證,倉庫和緩存提供商提供了一種簡單的方式來登錄會話添加到Web應用程序,幾乎沒有額外的代碼。我發現可以配置身份驗證提供程序的會話超時時間,例如:如何推進會話超時在ServiceStack

new CredentialsAuthProvider { SessionExpiry = TimeSpan.FromMinutes(10) } 

這提供了從登錄時點到期。如果我們正在開發一個安全系統,必須在很短的時間內註銷用戶,那麼我們會將其從默認的2周改爲上述示例。但是,這有一個問題,即無論用戶是否仍在與應用程序交互,用戶登錄10分鐘後都會被踢出。

有一個簡單的方法來告訴會話提供延長到期時間服務被稱爲是什麼時候?

理想的情況下,將允許我們擴展了會議具體服務/請求(這樣,當用戶主動與應用程序交互,因此調查服務可以忽略會話只延長)。

更新

基於由mythz給我們現在有一個簡單的解決方案,它提供了我們需要通過extending the ResponseFilterAttribute控制水平的答案。

+2

這不是您的問題的答案,但它的術語是「滑動」。例如,滑動緩存,滑動會話超時等。 – Matthew 2013-02-13 16:35:39

回答

10

ServiceStack不支持「滑動會話過期」自動呢。您基本上需要在每次成功請求時重置會話緩存條目。例如,你可以有一個響應濾波器(因爲他們只爲驗證請求,執行),其重新保存,將有擴大的效果是終身的到期時間的會議:

var userSession = httpReq.GetSession(); 
httpReq.SaveSession(userSession, slidingExpiryTimeSpan); 

如果你知道您使用的緩存提供商,例如Redis可以手動更新到期超時而無需重新讀取條目,例如:

var sessionKey = SessionFeature.GetSessionKey(httpReq.GetSessionId()); 
redis.ExpireEntryIn(sessionKey, slidingExpiry); //"urn:iauthsession:{sessionId}" 
+0

謝謝。也許未來SS的一個特性是你可以添加到一個服務請求函數的屬性,該函數明確地告訴它滑動到期,因此默認行爲不會。 – Dan 2013-02-13 17:54:47

+0

是的,我認爲'EnableSlidingExpiration'選項會起作用。 – mythz 2013-02-13 17:55:44

+2

希望對別人有用,[這裏是解決方案](http://teadriven.me.uk/2013/02/14/sliding-sessions-in-service-stack)我根據mythz建議。 – Dan 2013-02-14 22:58:14