日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

浅谈ASP.NET Forms验证

發布時間:2024/9/20 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈ASP.NET Forms验证 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

ASP.NET Forms驗證

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

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

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

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

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的數據驗證,其中Users.GetUser(string)這個方法是通過用戶名從數據庫中取得用戶實例。當用戶合理時,通過FormsAuthentication.SetAuthCookie方法將為用戶(以用戶名)創建一個身份驗證票證,并將其添加到響應的 Cookie 集合或 URL(cookieless)。這樣就實現了用戶驗證的過程,那么我們怎么得到用戶是否通過驗證呢?微軟把程序不斷的進行封裝,不斷的傻瓜化,當然想得到當前用戶是否通過驗證也很簡單,代碼如下:

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


是不是很簡單呢?當用戶(只要后臺管理驗證的情況下)驗證只要這兩個步驟就OK了,當用戶登錄如調用ValidUser方法,當載入頁面時通過 IsAuthenticated方法判斷當前用戶是否通過驗證。這樣一個用戶驗證模塊也就完成了,但是在現代的網絡中,用戶是相當的值錢的東東,每個網站都會想留住很多的用戶;有時有些東西只允許會員才能夠查看等等,這樣就需要更好的驗證。使用戶關閉瀏覽器后,在一段特定時間內還處于通過驗證狀態。這就需要操作和設置驗證的票據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判斷用戶是否存在記錄狀態(如:記錄1個月,1天,1年等等),可以在管道中進行判斷和編寫,這里就不再贅述。OK,由于時間的關系,就記錄這些,如果有什么錯誤或更好的方法請大家指出,謝謝。

總結

以上是生活随笔為你收集整理的浅谈ASP.NET Forms验证的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。