身份驗證,特別是在用戶沒有登陸的情況下不能訪問其他頁面的控制,好象總是避免不了。要達到這樣的目的,方法其實有很多。
1.採用session控制。在登陸的時候給session賦值,而後在其他所有頁面的Load事件中對session進行判斷。這個利用了session針對單用戶的特點,實現方法很簡單,但是需要每個頁面判斷,有些不盡人意.
2.cookie實現。自定義一個基類,用來判斷cookie值,並根據具體情況作出一些動作(是繼續作業,還是跳轉到login).其他頁面繼承這個類即可.具體實現可參考:http://blog.csdn.net/JustLovePro/archive/2008/04/07/2259296.aspx; http://blog.csdn.net/JustLovePro/archive/2008/04/08/2259369.aspx; 採用這種方式的好處就是非常靈活,因爲對cookie的控制都是有我們自己控制的. 單每個頁面還是要繼承這個基類,要避免這個,就得看MS的了。
3.Forms身份驗證.MS在這裏爲我們做了大量的工作,我們要做的其實就是簡單的配置就好了。然後就是幾個已經封裝好的類的使用。看代碼:
web.config:
<authentication mode="Forms">
<forms
name=".ASPXAUTH"
loginUrl ="Login.aspx"
defaultUrl ="FormsDemo.aspx"
protection ="All"
timeout ="30"
path ="/"
requireSSL ="false"
slidingExpiration ="true"
enableCrossAppRedirects ="false"
cookieless ="UseDeviceProfile"
domain =""
>
</forms>
</authentication>
<authorization>
<deny users="?"/>
</authorization>
------------------------------------
Login.cs
protected void btnLogin_Click(object sender, EventArgs e)
{
string username = txtName.Text;
FormsAuthentication.RedirectFromLoginPage(username, true);
}
---------------------
主頁面,顯示登陸者信息和註銷帳戶:
protected void Page_Load(object sender, EventArgs e)
{
if (User.Identity.IsAuthenticated)
{
FormsIdentity identity = User.Identity as FormsIdentity;
FormsAuthenticationTicket ticket = identity.Ticket;
Response.Write("UserName:" + identity.Name);
Response.Write("Time" + DateTime.Now.ToString());
}
else
{
FormsAuthentication.RedirectToLoginPage();
}
}
protected void btnsignout_Click(object sender, EventArgs e)
{
FormsAuthentication.SignOut();
FormsAuthentication.RedirectToLoginPage();
}
===============================
就這樣,其他頁面不用實現任何代碼,就可以達到目的。
------------這幾天代碼貼不進去,鬱悶死了....---------------------