浅谈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,代碼如下:
從代碼中看到的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验证的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 房子出租300到500一月,在哪里找?
- 下一篇: 中央空调出风口有水