我正在使用ASP.NET登錄控件。我希望能夠爲每個用戶單獨設置表單身份驗證超時(而不是全局在web.config中)。根據我的理解,唯一的方法是手動設置AuthenticationTicket的超時時間。使用登錄控制時有沒有辦法做到這一點?在我看來,登錄控制將所有這一切都抽象出來。我希望有一些方法可以繼續使用登錄控制,但也可以爲每個用戶分別設置FormsAuthentication超時。使用ASP.NET登錄控件時可以手動設置身份驗證票嗎?
感謝, 科瑞
我正在使用ASP.NET登錄控件。我希望能夠爲每個用戶單獨設置表單身份驗證超時(而不是全局在web.config中)。根據我的理解,唯一的方法是手動設置AuthenticationTicket的超時時間。使用登錄控制時有沒有辦法做到這一點?在我看來,登錄控制將所有這一切都抽象出來。我希望有一些方法可以繼續使用登錄控制,但也可以爲每個用戶分別設置FormsAuthentication超時。使用ASP.NET登錄控件時可以手動設置身份驗證票嗎?
感謝, 科瑞
MSDN says:
的的loggedIn事件的 身份驗證提供者檢查後提出 用戶的憑證和 認證cookie排隊, 發送給瀏覽器,在接下來的 響應中。在對 用戶進行身份驗證後,使用登錄事件 可提供其他處理,例如 訪問每個用戶的數據。
所以這個事件似乎是取代cookie的正確地方。首先,餅乾需要進行檢索和解密:
在此之後HttpCookie authCookie = Response.Cookies[FormsAuthentication.FormsCookieName];
FormsAuthenticationTicket oldAuthTicket =
FormsAuthentication.Decrypt(authCookie.Value);
權的基礎上,只提取新的認證憑證應創建:
FormsAuthenticationTicket newAuthTicket = new FormsAuthenticationTicket(
oldAuthTicket.Version,
oldAuthTicket.Name,
DateTime.Now,
DateTime.Now.Add(timeoutForUser),
oldAuthTicket.IsPersistent,
oldAuthTicket.UserData,
FormsAuthentication.FormsCookiePath
);
timeoutForUser
這裏是一個TimeSpan
值保持會話超時爲用戶。
最後,舊Cookie的響應應該用新的替換:
string encryptedTicket = FormsAuthentication.Encrypt(authTicket);
authCookie =
new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket);
HttpContext.Current.Response.Cookies.Set(authCookie);
這應該做的伎倆。
登錄控件有,你可以用它來處理自己的認證LoggingIn
和LoggedIn
事件。
您可以通過設置e.Cancel = True
取消在LoggingIn
事件的登錄過程,然後手動創建票證使用新new FormsAuthenticationTicket(...)
謝謝!這工作完美。你達人! – 2011-03-11 21:07:23