2012-08-15 111 views
2

在過去的幾個月裏,我們有用戶抱怨說,儘管我們的身份驗證超時設置爲30,但他們的身份驗證有時會提前過期 - 只有20分鐘的非活動狀態。今天發現SlidingExpiration只在剩下不到一半的授權時間時纔會重置,留下了做某事的可能性,等待十分鐘,做其他事情,等待21分鐘,並且獲得「提早」超時。每個請求都需要執行SetAuthCookie

在Master Page的Page_Load中做這樣的事情有什麼潛在的缺點嗎?

if(CurrentUser != null) { 
    FormsAuthentication.SetAuthCookie(CurrentUser.UserName, false); 
} 

...因此重新設置每個請求的滑動過期?

編輯:

這段代碼是我清盤使用;它只會每分鐘重置一次令牌。

var cookie = Request.Cookies[FormsAuthentication.FormsCookieName]; 
var ticket = FormsAuthentication.Decrypt(cookie.Value); 

if (ticket.IssueDate.AddMinutes(1) < DateTime.Now && ticket.IssueDate.AddMinutes(30) > DateTime.Now) { 
    FormsAuthentication.SetAuthCookie(currentUser.UserName, false); 
} 
+0

關於代碼的兩個注意事項:1)我非常確定他們無法使用過期的票據到達那裏,但是如果他們超過30分鐘,我一定不要重置。 2)currentUser是我們應用程序中的一個變量;如果你試圖直接編譯它,它將無法工作。 – 2012-08-21 15:17:32

回答

2

最大的缺點是它會禁用緩存, <%@ OutputCache%>指令將不再正常工作。所以您可能會開始看到由於緩存未命中而導致性能下降。

如果您能夠做到,最簡單的做法就是提高到期超時時間。

+0

我們無法緩衝超時時間,但我確實已設置爲只在至少一分鐘後才更新。性能仍然不是很好,但它確實在29到30分鐘之間保持超時。 – 2012-08-21 15:10:00