.NET表單身份驗證
ASP.NET Forms 身份驗證的簡單實現:1)在Web.config文件中配置應用程序使用 Forms 身份驗證;2)創建登陸頁面,將用戶身份驗證票證添加到Cookie集合。
?????? 1.配置文件中設置為Forms驗證
?? <authentication?mode="Forms">
??????<forms?loginUrl="NetFromwork/FormLogin.aspx"?defaultUrl="NetFromwork/FormLogin.aspx"?name=".ASPNETFORMSTEST"?protection="All"?timeout="20"?></forms>
???</authentication>
???<authorization>
??????<deny?users="?"/>
???</authorization>
?????? 2.驗證用戶合法后,將身份驗證票證寫入Cookie集合
????string?userName?=?"Jimmy";
????//Create?ticket
????FormsAuthenticationTicket?ticket?=?new?FormsAuthenticationTicket(1,?userName,?DateTime.Now,?DateTime.Now.AddMinutes(1),?false,?"");
????//Encrypt?the?ticket.
????String?encTicket?=?FormsAuthentication.Encrypt(ticket);
????//Create?the?cookie.
????Response.Cookies.Add(new?HttpCookie(FormsAuthentication.FormsCookieName,?encTicket));
????//Redirect?back?to?default?or?original?URL.
????FormsAuthentication.RedirectFromLoginPage(userName,?true);
?????? 上述代碼已經實現了簡單的Forms身份驗證功能。接下來我們看看票據信息構造函數FormsAuthenticationTicket()和用戶重定向函數RedirectFromLoginPage()的原型:

函數FormsAuthenticationTicket()原型
????????//
????????//?摘要:
????????//?????使用?cookie?名、版本、目錄路徑、發布日期、過期日期、持久性以及用戶定義的數據初始化?System.Web.Security.FormsAuthenticationTicket
????????//?????類的新實例。
????????//
????????//?參數:
????????//???version:
????????//?????票證的版本號。
????????//
????????//???name:
????????//?????與身份驗證票關聯的用戶名。
????????//
????????//???userData:
????????//?????存儲在票證中的用戶特定的數據。
????????//
????????//???isPersistent:
????????//?????如果票證將存儲在持久性?Cookie(跨瀏覽器會話保存),則為?true;否則為?false。如果該票證存儲在?URL?中,將忽略此值。
????????//
????????//???issueDate:
????????//?????票證發出時的本地日期和時間。
????????//
????????//???cookiePath:
????????//?????票證存儲在?Cookie?中時的路徑。
????????//
????????//???expiration:
????????//?????票證過期時的本地日期和時間。
????????public?FormsAuthenticationTicket(int?version,?string?name,?DateTime?issueDate,?DateTime?expiration,?bool?isPersistent,?string?userData,?string?cookiePath);

函數RedirectFromLoginPage()原型
?//
????????//?摘要:
????????//?????將經過身份驗證的用戶重定向回最初請求的?URL?或默認?URL。
????????//
????????//?參數:
????????//???userName:
????????//?????經過身份驗證的用戶名。
????????//
????????//???createPersistentCookie:
????????//?????若要創建持久?Cookie(跨瀏覽器會話保存的?Cookie),則為?true;否則為?false。
????????public?static?void?RedirectFromLoginPage(string?userName,?bool?createPersistentCookie);
?????? 論壇常見的登陸有效期功能是怎么實現的呢?是通過設置哪些參數實現的呢?不禁有些迷茫,涉及到登陸有效期的參數有如下幾個:函構造數FormsAuthenticationTicket()中的isPersistent和expiration,函數RedirectFromLoginPage()中的createPersistentCookie,配置文件中還有timeout屬性,究竟要怎么設置才能實現“登陸一小時,一天,一個月,永久,瀏覽器進程”功能呢?
?????? 下面談談我對這些參數的理解,通過查找網上資料,MSDN和程序測試而來,有理解錯誤的地方歡迎大家指正。
???????1.關于持久Cookie,并不是說isPersistent=True或者createPersistentCookie=True時,就能夠保持永久登陸狀態,持久Cookie解釋成跨瀏覽器會話保存的Cookie更合適。當設置為True時,不同瀏覽器進程之間可以共享該Cookie,也就是說在一個IE中登陸后,在另一個IE中打開還保持登陸狀態。
?????? 2.關于函數RedirectFromLoginPage(),MSDN上解釋是這樣的“如果 CookiesSupported 屬性為 true,并且 ReturnUrl 變量位于當前應用程序中,或者 EnableCrossAppRedirects 屬性為 true,則 RedirectFromLoginPage 方法將發出身份驗證票證并使用 SetAuthCookie 方法將其置于默認 Cookie 中。”
???????可見,在執行函數RedirectFromLoginPage()時,會覆蓋掉FormsAuthenticationTicket實例的票據信息,所以第二部分代碼中,不該調用該函數,而應該用下面的代碼代替:
????string?userName?=?"Jimmy";
????//Create?ticket
????FormsAuthenticationTicket?ticket?=?new?FormsAuthenticationTicket(1,?userName,?DateTime.Now,?DateTime.Now.AddMinutes(1),?false,?"");
????//Encrypt?the?ticket.
????String?encTicket?=?FormsAuthentication.Encrypt(ticket);
????//Create?the?cookie.
????Response.Cookies.Add(new?HttpCookie(FormsAuthentication.FormsCookieName,?encTicket));
????//Redirect?back?to?default?or?original?URL.
????Response.Redirect(FormsAuthentication.GetRedirectUrl(userName,true?));? //代替RedirectFormLoginPage
?????? 3.關于登陸有效時間,涉及到登陸時間的只有構造函數FormsAuthenticationTicket()的參數expiration票據過期時間和配置文件中的timeout屬性了,這兩個有什么關系呢?----票據的有效時間是由expiration屬性決定的,而timeout只有當expiration屬性沒有顯示設置的時候才生效。
?????? 1.配置文件中設置為Forms驗證






?????? 2.驗證用戶合法后,將身份驗證票證寫入Cookie集合









?????? 上述代碼已經實現了簡單的Forms身份驗證功能。接下來我們看看票據信息構造函數FormsAuthenticationTicket()和用戶重定向函數RedirectFromLoginPage()的原型:












































?????? 論壇常見的登陸有效期功能是怎么實現的呢?是通過設置哪些參數實現的呢?不禁有些迷茫,涉及到登陸有效期的參數有如下幾個:函構造數FormsAuthenticationTicket()中的isPersistent和expiration,函數RedirectFromLoginPage()中的createPersistentCookie,配置文件中還有timeout屬性,究竟要怎么設置才能實現“登陸一小時,一天,一個月,永久,瀏覽器進程”功能呢?
?????? 下面談談我對這些參數的理解,通過查找網上資料,MSDN和程序測試而來,有理解錯誤的地方歡迎大家指正。
???????1.關于持久Cookie,并不是說isPersistent=True或者createPersistentCookie=True時,就能夠保持永久登陸狀態,持久Cookie解釋成跨瀏覽器會話保存的Cookie更合適。當設置為True時,不同瀏覽器進程之間可以共享該Cookie,也就是說在一個IE中登陸后,在另一個IE中打開還保持登陸狀態。
?????? 2.關于函數RedirectFromLoginPage(),MSDN上解釋是這樣的“如果 CookiesSupported 屬性為 true,并且 ReturnUrl 變量位于當前應用程序中,或者 EnableCrossAppRedirects 屬性為 true,則 RedirectFromLoginPage 方法將發出身份驗證票證并使用 SetAuthCookie 方法將其置于默認 Cookie 中。”
???????可見,在執行函數RedirectFromLoginPage()時,會覆蓋掉FormsAuthenticationTicket實例的票據信息,所以第二部分代碼中,不該調用該函數,而應該用下面的代碼代替:









?????? 3.關于登陸有效時間,涉及到登陸時間的只有構造函數FormsAuthenticationTicket()的參數expiration票據過期時間和配置文件中的timeout屬性了,這兩個有什么關系呢?----票據的有效時間是由expiration屬性決定的,而timeout只有當expiration屬性沒有顯示設置的時候才生效。
摘自:http://www.cnblogs.com/freshman0216/archive/2008/06/17/1224215.html
參考:http://www.cnblogs.com/liuqhui/archive/2008/07/20/1246987.html