有一個詳細的article on MSDN,它解釋了Forms身份驗證的工作方式以及可用的配置選項。 基本上表單身份驗證使用cookie(除非你明確地告訴它不要)。因此,您可以將表單身份驗證Cookie的到期日期設置爲24小時。但有一個問題。您可能需要推出自己的會員代碼,因爲默認情況下,forms
元素的timeout
屬性也用於設置持久cookie的生命週期。而你不想那樣。您需要將Cookie的到期時間設置爲24小時。
它的工作方式是,在用戶登錄後,會創建表單身份驗證Cookie,然後將其與每個請求一起包括在內,直到其過期。 從鏈接的文章:
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,
"cookieName",
DateTime.Now,
DateTime.Now.AddHours(24), // value of time out property
false,
String.Empty,
FormsAuthentication.FormsCookiePath);
Forms身份驗證使用:
if (Membership.ValidateUser(userName.Text, password.Text))
{
if (Request.QueryString["ReturnUrl"] != null)
{
FormsAuthentication.RedirectFromLoginPage(userName.Text, false);
}
else
{
FormsAuthentication.SetAuthCookie(userName.Text, false);
}
}
else
{
Response.Write("Invalid UserID and Password");
}
您可以使用FormsAuthenticationTicket類創建窗體身份驗證票: 成員資格提供驗證用戶時具有類似下面的代碼用於加密和簽署表格認證票證的加密方法:
string encryptedTicket = FormsAuthentication.Encrypt(ticket);
Cre吃餅乾:
HttpCookie authCookie = new HttpCookie(
FormsAuthentication.FormsCookieName,
encryptedTicket);
餅乾添加到Cookie集合:
Response.Cookies.Add(authCookie);
這應該是它。
您可能需要推出自己的Cookie,因爲默認情況下,您爲forms
指定的timeout
屬性是用於cookie超時的屬性。 所以在你的例子:
<authentication mode="Forms">
<forms loginUrl="Login.aspx" timeout="15" slidingExpiration="true"/>
</authentication>
cookie的超時時間爲15分鐘也。 在您的案例中,更簡單的方法可能是使用會話變量來處理強制執行的24小時超時。因爲如果用戶在此期間實際上處於活動狀態(否則它將從Cookie中超時),您只會觸及該狀態。所以你可以終止一個會話,如果已經活動超過24小時。
Mircea有更好的解決方案! – 2009-10-14 14:06:02
他和你很相似:我最終沿着這些線做了一些事情(實際上是作爲與會話相對的identity.name的一部分存儲的) – John 2009-10-14 14:24:02