溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ASP.NET如何實現(xiàn)Forms驗證

發(fā)布時間:2021-12-01 16:18:31 來源:億速云 閱讀:117 作者:小新 欄目:編程語言

小編給大家分享一下ASP.NET如何實現(xiàn)Forms驗證,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

ASP.NET Forms驗證

用戶驗證是每一個項目必須的一個模塊,由于已經(jīng)很久沒有碰到這一塊內容,今天寫一個用戶驗證居然腦子一片空白。于是乎就和一個同事進行了一片討論,晚上回家決定把討論的結果給記錄下來,以備后來之需。在ASP.NET中有幾種用戶驗證的方法:Windows驗證,F(xiàn)orms驗證和Passport驗證。當然用戶也可以自定義與驗證方法,而最常用的莫過于Forms驗證,這也是今天所要討論的驗證方式。

ASP.NET Forms驗證方式首先要配置的是web.config文件,把authentication節(jié)點配置為Forms驗證,而它默認的是Windows驗證。再修改配置文件時,還要注意大小寫,因為XML文件是大小寫敏感的,修改后authentication節(jié)點如下所示,其中還包含了一些form的配置參數(shù)。

<authenticationmodeauthenticationmode="Forms"> <forms protection="All" timeout="20" name=".XDOTNET" loginUrl="SignIn.aspx" defaultUrl="Default.aspx" path="/" requireSSL="false" enableCrossAppRedirects="false" > </forms> </authentication>

關于forms節(jié)點的屬性在后面介紹FormsAuthetication類的有關成員時,再介紹它們的用處。用戶驗證,顧名思義就是驗證用戶的合理性,當用戶登錄到網(wǎng)站時,驗證輸入的用戶名和密碼是否和數(shù)據(jù)庫中存儲的數(shù)據(jù)相符合。其實很簡單,有一種快速的方法,這種驗證方法很適合后臺管理的驗證,因為當我們關閉瀏覽器時驗證就會失效。

publicstaticboolValidUser(stringuserName,stringpassword)  {  if(!string.IsNullOrEmpty(userName)&&!string.IsNullOrEmpty(password))  {  password=FormsAuthentication.HashPasswordForStoringInConfigFile(password,"MD5");  stringrealPassword=Users.GetUser(userName).Password;  if(string.Compare(password,realPassword,true)==0)  {  FormsAuthentication.SetAuthCookie(userName,false);  returntrue;  }  }  returnfalse;  }

上面的方法就可以驗證以32位MD5加密的Password的數(shù)據(jù)驗證,其中Users.GetUser(string)這個方法是通過用戶名從數(shù)據(jù)庫中取得用戶實例。當用戶合理時,通過FormsAuthentication.SetAuthCookie方法將為用戶(以用戶名)創(chuàng)建一個身份驗證票證,并將其添加到響應的 Cookie 集合或 URL(cookieless)。這樣就實現(xiàn)了用戶驗證的過程,那么我們怎么得到用戶是否通過驗證呢?微軟把程序不斷的進行封裝,不斷的傻瓜化,當然想得到當前用戶是否通過驗證也很簡單,代碼如下:

public static bool IsAuthenticated()   {  return HttpContext.Current.User.Identity.IsAuthenticated;  }


是不是很簡單呢?當用戶(只要后臺管理驗證的情況下)驗證只要這兩個步驟就OK了,當用戶登錄如調用ValidUser方法,當載入頁面時通過 IsAuthenticated方法判斷當前用戶是否通過驗證。這樣一個用戶驗證模塊也就完成了,但是在現(xiàn)代的網(wǎng)絡中,用戶是相當?shù)闹靛X的東東,每個網(wǎng)站都會想留住很多的用戶;有時有些東西只允許會員才能夠查看等等,這樣就需要更好的驗證。使用戶關閉瀏覽器后,在一段特定時間內還處于通過驗證狀態(tài)。這就需要操作和設置驗證的票據(jù)FormsAuthenticationTicket,代碼如下:

public static bool ValidUser(string userName, string password)   {  if (!string.IsNullOrEmpty(userName) && !string.IsNullOrEmpty(password))   {  password = FormsAuthentication.HashPasswordForStoringInConfigFile(password, "MD5");  string realPassword = Users.GetUser(userName).Password;  if (string.Compare(password, realPassword, true) == 0)   {  FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1,  userName,  DateTime.Now,  DateTime.Now.AddMinutes(20),  false,  null//可以將Roles按","分割成字符串,寫入cookie  );  string data = FormsAuthentication.Encrypt(ticket);  HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, data);  cookie.Path = FormsAuthentication.FormsCookiePath;  cookie.Domain = FormsAuthentication.CookieDomain;  cookie.Expires = ticket.Expiration;  HttpContext.Current.Response.Cookies.Add(cookie);  return true;  }  }  return false;  }

從代碼中看到的FormsCookiePath,CookieDomain等等就是從配置文件中獲得,關于其它的FormsAuthentication成員可以訪問MSDN(FormsAuthentication)。我們同樣也可以通過HttpContext.Current.User對象來判斷當前用戶的狀況,也可以用IsInRole方法來判斷用戶的角色。當然當我們驗證用戶后,要把用戶加入到Http上下文HttpContext的當前請求的User對象中,代碼如下:

FormsIdentity identity = new FormsIdentity(ticket);  GenericPrincipal user = new GenericPrincipal(identity, new string[] { });  HttpContext.Current.User = user;

這樣就完成了ASP.NET Forms驗證的全過程。至于查看用戶的Cookie判斷用戶是否存在記錄狀態(tài)(如:記錄1個月,1天,1年等等),可以在管道中進行判斷和編寫,這里就不再贅述。

以上是“ASP.NET如何實現(xiàn)Forms驗證”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業(yè)資訊頻道!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內容。

AI