[csharp]
if (this.Txt_UserName.Text == "Admin" && this.Txt_Password.Text == "123456")
{
var ticket = new System.Web.Security.FormsAuthenticationTicket(1, this.Txt_UserName.Text, DateTime.Now, DateTime.Now.AddDays(1), false, "USER");
var encryptedTicket = System.Web.Security.FormsAuthentication.Encrypt(ticket);
if (Request.Cookies[System.Web.Security.FormsAuthentication.FormsCookieName] != null)
Request.Cookies.Remove(System.Web.Security.FormsAuthentication.FormsCookieName);
var loginIdentify = new HttpCookie(System.Web.Security.FormsAuthentication.FormsCookieName);
loginIdentify.Expires = DateTime.Now.AddDays(1);
loginIdentify.Value = encryptedTicket;
Response.AppendCookie(loginIdentify);
if (!String.IsNullOrEmpty(Request.QueryString["ReturnUrl"]) && !Request.QueryString["ReturnUrl"].ToLower().Contains("profile"))
Response.Redirect(Server.UrlDecode(Request.QueryString["ReturnUrl"]));
else
Response.Redirect(System.Web.Security.FormsAuthentication.DefaultUrl);
}
if (this.Txt_UserName.Text == "Admin" && this.Txt_Password.Text == "123456")
{
var ticket = new System.Web.Security.FormsAuthenticationTicket(1, this.Txt_UserName.Text, DateTime.Now, DateTime.Now.AddDays(1), false, "USER");
var encryptedTicket = System.Web.Security.FormsAuthentication.Encrypt(ticket);
if (Request.Cookies[System.Web.Security.FormsAuthentication.FormsCookieName] != null)
Request.Cookies.Remove(System.Web.Security.FormsAuthentication.FormsCookieName);
var loginIdentify = new HttpCookie(System.Web.Security.FormsAuthentication.FormsCookieName);
loginIdentify.Expires = DateTime.Now.AddDays(1);
loginIdentify.Value = encryptedTicket;
Response.AppendCookie(loginIdentify);
if (!String.IsNullOrEmpty(Request.QueryString["ReturnUrl"]) && !Request.QueryString["ReturnUrl"].ToLower().Contains("profile"))
Response.Redirect(Server.UrlDecode(Request.QueryString["ReturnUrl"]));
else
Response.Redirect(System.Web.Security.FormsAuthentication.DefaultUrl);
}
//System.Web.Security.FormsAuthentication.SignOut();退出
//Page.User.Identity.Name獲取用戶名
// if (User.Identity.IsAuthenticated)判斷是否通過認證
//web.config配置
<authentication mode="Forms">
<forms loginUrl="Login.aspx" name=".ASPXAUTH" timeout="43200" defaultUrl="WebForm1.aspx" protection="All" path="/" requireSSL="false" slidingExpiration="true" enableCrossAppRedirects="false" />
</authentication>
<anonymousIdentification enabled="true" />
<authorization>
<deny users="?"></deny>
</authorization>
在一個ASP.NET網站中,有些頁面會允許所有用戶訪問,包括一些未登錄用戶,但有些頁面則必須是已登錄用戶才能訪問,還有一些頁面可能會要求特定的用戶或者用戶組的成員才能訪問。這類頁面因此也可稱為【受限頁面】,它們一般代表著比較重要的頁面,包含一些重要的操作或功能。
為了保護受限制的頁面的訪問,ASP.NET提供了一種簡單的方式:可以在web.config中指定受限資源允許哪些用戶或者用戶組(角色)的訪問,也可以設置為禁止訪問。
比如,網站有一個頁面:MyInfo.aspx,它要求訪問這個頁面的訪問者必須是一個已登錄用戶,那麼可以在web.config中這樣配置:
<location path="MyInfo.aspx">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
為了方便,我可能會將一些管理相關的多個頁面放在Admin目錄中,顯然這些頁面只允許Admin用戶組的成員才可以訪問。 對於這種情況,我們可以直接針對一個目錄設置訪問規則:
<location path="Admin">
<system.web>
<authorization>
<allow roles="Admin"/>
<deny users="*"/>
</authorization>
</system.web>
</location>
這樣就不必一個一個頁面單獨設置了,還可以在目錄中創建一個web.config來指定目錄的訪問規則,請參考後面的示例。
在前面的示例中,有一點要特別注意的是:
1. allow和deny之間的順序一定不能寫錯了,UrlAuthorizationModule將按這個順序依次判斷。
2. 如果某個資源只允許某類用戶訪問,那麼最後的一條規則一定是 <deny users="*" />
在allow和deny的配置中,我們可以在一條規則中指定多個用戶:
1. 使用users屬性,值為逗號分隔的用戶名列表。
2. 使用roles屬性,值為逗號分隔的角色列表。
3. 問號 (?) 表示匿名用戶。
4. 星號 (*) 表示所有用戶。