什麼時候用?
比如ASP.NET程式的一個Admin檔案夾,是專門進行網上管理用的(比如後台資料維護),一般訪問者不能訪問裡面的所有檔案.只有通過驗證的使用者才能訪問.按照以前的ASP的做法,是在使用者通過Login頁面時,設定Session(即Cookie)來判斷使用者是否通過驗證,每個Admin檔案夾裡的分頁檔都要設定驗證語句,而且並不是很安全,這個時候,ASP.NET的4種驗證方式之一:基於表單的驗證就派上了用場.您做的僅是在Admin檔案夾裡面放置一個只有幾行語句的Web.config檔案.
怎樣用?
這個問題您可以去看書籍上的介紹(Wrax出版的《ASP.NET進階編程》),不過,我這裡有自己常用的方式,不妨看看.
檔案目錄為:
+BIN
+Admin
- *.aspx
- web.config //Admin檔案夾下的web.config
login.aspx
web.config //根目錄的web.config
1,根目錄的web.config的配置
<configuration>
<system.web>
<authentication mode="Forms">
<forms name="mycookiename" loginUrl="login.aspx" protection="All" timeout="30">
</forms>
</authentication>
<authorization>
<allow users="*"/>
</authorization>
</system.web>
</configuration>
2,Admin檔案夾下的web.config的配置
<configuration>
<system.web>
<authorization>
<deny users="?" />
</authorization>
</system.web>
</configuration>
3,login.aspx的配置
此頁面就是一個驗證登陸頁面:
<asp:textbox id=textname runat=server/>帳號
<asp:textpassword id=textpassword runat=server>密碼
<asp:checkbox id=mycheckbox runat=server/>是否記住密碼,永久登陸
<asp:button runat=server onclick=btnloginclick text=登陸/>
處理事件1(當使用者點擊登陸按鈕時候)
void btnloginclick(Object sender,EventArgs e)
{
if(使用者通過驗證)//這一點可以在bin目錄放置自己的dll檔案來驗證使用者,返回一個bool.
{
FormsAuthentication.RedirectFromLoginPage(UserName.Text, mycheckbox.Checked);//這句用來儲存Cookie來說明使用者UserName.Text通過的驗證,可以訪問Admin檔案夾了,另外,如果那個永久登陸的checkbox被checked了,則這個驗證Cookie的失效日期可以長達50年(預設為瀏覽器時間).
ResponseRedirect("Admin");//這時,就可以暢通無阻訪問Admin檔案夾了.
}
}
處理事件2(當使用者已經通過驗證,就沒有必要在訪問login.aspx時候再次輸入密碼了)
這個由表單驗證自動完成,相當於:
void Page_Load(Object sender,EventArgs e)
{
if(Context.User.Identity.IsAuthenticated)Response.Redirect("Admin");
}
4,登出驗證:
用FormsAuthentication.SignOut();
其實,上述方案並不是很安全的解決方案.只是很實用,簡單,又比較安全的驗證解決方案.