回覆列表
  • 1 # CoreCode

    ASP.NET中如何實現FORM認證登入 如何運用 Form 表單認證 ASP.NET 的安全認證,共有“Windows”“Form”“Passport”“None”四種驗證模式。“Windows”與“None”沒有起到保護的作用,不推薦使用;“Passport”我又沒用過,唉……所以我只好講講“Form”認證了。我打算分三部分: 第一部分 —— 怎樣實現From 認證; 第二部分 —— Form 認證的實戰運用; 第三部分 —— 實現單點登入(Single Sign On) 第一部分 如何運用 Form 表單認證 一、 新建一個測試專案 為了更好說明,有必要新建一個測試專案(暫且為“FormTest”吧),包含三張頁面足矣(Default.aspx、Login.aspx、UserInfo.aspx)。啥?有人不會新建專案,不會新增頁面?你問我咋辦?我看這麼辦好了:拖出去,打回原藉,從幼兒園學起…… 二、 修改Web.config 1、 雙擊專案中的Web.config(不會的、找不到的打 PP) 2、 找到下列文字 <authentication mode="Windows" /> 把它改成: <authentication mode="Forms"> <forms loginUrl="Login.aspx" name=".ASPXAUTH"></forms> </authentication> 3、 找到<authorization> <allow users="*" /></authorization>換成 <authorization><deny users="?"></deny></authorization> 這裡沒什麼好說的,只要複製過去就行。雖說如此,但還是有人會弄錯,如下: <authentication mode="Forms"> <forms loginUrl="Login.aspx" name=".APSX"></forms> <deny users="?"></deny> </authentication> 若要問是誰把 <deny users="?"></deny> 放入 <authentication> 中的,我會很榮幸地告訴你,那是 N 年前的我:<authentication> 與 <authorization> 都是以 auth 字母開頭又都是以 ation 結尾,何其相似;英文單詞背不下來的我以為他們是一夥的…… 三、 編寫.cs 程式碼——登入與退出 1、 登入程式碼: a、 書本上介紹的 private void Btn_Login_Click(object sender, System.EventArgs e) { if(this.Txt_UserName.Text=="Admin" && this.Txt_Password.Text=="123456") { System.Web.Security.FormsAuthentication.RedirectFromLoginPage(this.Txt_UserName.Text,false); } } b、 偶找了 N 久才找到的 private void Btn_Login_Click(object sender, System.EventArgs e) { if(this.Txt_UserName.Text=="Admin" && this.Txt_Password.Text=="123456") { System.Web.Security.FormsAuthentication.SetAuthCookie(this.Txt_UserName.Text,false); Response.Redirect("Default.aspx"); } } 以上兩種都可發放驗證後的 Cookie ,即透過驗證,區別: 方法a) 指驗證後返回請求頁面,俗稱“從哪來就打哪去”。比如:使用者沒登入前直接在 IE 位址列輸入 http://localhost/FormTest/UserInfo.aspx ,那麼該使用者將看到的是 Login.aspx?ReturnUrl=UserInfo.aspx ,輸入使用者名稱與密碼登入成功後,系統將根據“ReturnUrl”的值,返回相應的頁面 方法b) 則是分兩步走:透過驗證後就直接發放 Cookie ,跳轉頁面將由程式設計師自行指定,此方法多用於 Default.aspx 使用框架結構的系統。 2、 退出程式碼: private void Btn_LogOut_Click(object sender, System.EventArgs e) { System.Web.Security.FormsAuthentication.SignOut(); } 四、 如何判斷驗證與否及獲取驗證後的使用者資訊 有的時候,在同一張頁面需要判斷使用者是否已經登入,然後再呈現不同的佈局。有人喜歡用 Session 來判斷,我不反對此類做法,在此我只是想告訴大家還有一種方法,且看下面程式碼: if(User.Identity.IsAuthenticated) { //你已透過驗證,知道該怎麼做了吧? } User.Identity 還有兩個屬性AuthenticationType(驗證型別)與 Name(使用者名稱稱) ,大家要注意的是 Name 屬性,此處的User.Identity.Name將得到,驗證透過(RedirectFromLoginPage 或SetAuthCookie)時,我們帶入的第一個引數 this.Txt_UserName.Text 。這個引數很重要,關係到種種……種種的情況,何出此言,且聽下回分解…… 靈活運用 Form 表單認證中的 deny 與 allow 及保護 .htm 等檔案 第二部分 Form 認證的實戰運用 Web.config 的作用範圍 新建專案時, VS.Net 會在專案根目錄建立一個內容固定的 Web.config。除了在專案根目錄,你還可以在任一目錄下建立 Web.config ,條件就是應用程式級別的節點只能在根目錄的 Web.config 中出現。至於哪些是應用程式級別節點呢,這個問題嘛,其實我也不太清楚,呵呵。電腦不是我發明的,微軟不是我建立的,C# 更不是我說了算的,神仙也有不知道的,所以我不曉得是正常的。話雖如此,只要它不報錯,那就是對的。 關於Web.config 設定的作用範圍,記住以下兩點: 1、 Web.config 的設定將作用於所在目錄的所有檔案及其子目錄下的所有東東(繼承:子隨父姓) 2、 子目錄下的 Web.config 設定將覆蓋由父目錄繼承下來的設定(覆蓋:縣官不如現管) 給大家提個問題:有沒有比根目錄Web.config 的作用範圍還大

  • 中秋節和大豐收的關聯?
  • 簡述女士著裝禮儀方面有哪些禁忌?