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