1. 程式人生 > >asp.net的Form驗證

asp.net的Form驗證

配置檔案的<system.web></system.web>結點下新增如下程式碼: 

<!--身份驗證方式-->      

 <authentication mode="Forms">

        <forms loginUrl="~/Login.aspx" />

      </authentication>

      <!--授權-->

      <authorization>

        <!--deny:阻止,?:匿名使用者,*:所有使用者-->

        <deny users="?"/>

      </authorization>

登入的後臺程式碼為(在這裡使用者名稱和密碼都設定為admin,chkPWD:是否記住密碼):

首先匯入名稱空間:using System.Web.Security;

if (TextBox1.Text=="admin" && TextBox2.Text=="admin")

     // 將通過身份驗證的使用者重定向回原來請求的頁面,(例如未登入使用者從Default.aspx點選進入ShoppingCard.aspx,
      由於ShoppingCard.aspx不允許匿名使用者訪問,則倒跳轉到Login.aspx,在通過驗證後,頁面會自動中轉到ShoppingCard.aspx)
      如果使用者從Public目錄裡的Reg.aspx點選跳轉到Login.aspx,通過驗證後頁面會預設跳轉到default.aspx

     FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, chkPWD.Checked);

else

      Response.Write("使用者名稱或密碼錯誤");

Public目錄下的頁面(如使用者註冊頁面,允許匿名使用者訪問以註冊賬號),由於在web.config檔案中設定了阻止匿名使用者訪問,所以要實現匿名使用者能夠訪問Public目錄下的頁面,在這裡有兩種方法:
方法一:
在Public目錄下新增配置檔案web.config,並在<system.web></system.web>結點下新增程式碼:

<!--允許所有使用者訪問該目錄下的所有頁面:allow表示允許使用者訪問-->

<authorization>

   <allow users="*"/>

</authorization>

方法二:

如果不想在Public目錄下新增配置檔案web.config,則可以修改根目錄下的web.config,在之前預設的</system.web>結點下面再新增如下程式碼:

<location path="Public">

    <system.web>

      <authorization>

        <allow users="*"/>

      </authorization>

    </system.web>

  </location>

則整個web.config的程式碼結構如下所示:


還有一種情況就是當前目錄下的所有頁面都阻止匿名訪問,但是有一個頁面可以匿名訪問,比如Default.aspx頁面,則可以將上面的location 結點的path屬性的值修改為這個可以訪問的頁面<lcation path="Default.aspx">
這樣就實現了當面目錄下除了Default.aspx和Login.aspx,以外的所有頁面都要登入使用者能訪問。

如果要退出登入則可以通過:
FormsAuthentication.SignOut(); 銷燬使用者登入的憑據
FormsAuthentication.RedirectToLoginPage();重定向到使用者登入頁面

Request.IsAuthenticated 能判斷使用者是否通過驗證,即使用者是否登入,登入則返回true,否則返回false,這樣可以實現向登入使用者和未登入使用者顯示不用的頁面資訊。
User.Identity.Name能獲取當前登入使用者的使用者名稱,也就是登入的時候FormsAuthentication.RedirectFromLoginPage(TextBox1.Text, chkPWD.Checked)裡的TextBox1.Text。

 使用Forms認證,客戶端本地時間不對無法登陸系統,解決辦法:

FormsAuthentication.RedirectFromLoginPage第二個引數設定成false