網上購物已經成為現在生活不可缺少的一部分。我們上淘寶只是為了消費,今天換一個角度,用程序員的眼光看看淘寶。
如上圖:
情況一:當打開一些和賬戶有關的網頁,檢測用戶沒有登錄,系統自動會跳轉到登錄界面。
情況二:當檢測到已經有用戶登錄,頁面會自動跳轉到目的頁面。
問題:系統如何檢測用戶是否登錄,如何保存用戶的登錄狀態?
下面說說自己的理解:利用Session保存用戶狀態,
解決方案一:每個用戶都有一個Session對象相對應,當用戶想要跳轉到任意跟賬戶有關的界面(已買到的寶貝頁面),每個頁面加載的時候都要判斷Session對象保存的用戶狀態。
1. 登錄界面的代碼:
- public partial class Login : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- }
- protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
- {
- Session["UserFlag"] = false;//首先設置會話值UserFlage表示用戶是否登錄
- if (UserVolidate(Login1.UserName, Login1.Password) == true)//調用自定義方法,驗證用戶是否登錄成功
- {
- Session["UserFlag"] = true; //登錄成功
- e.Authenticated = true;
- Response.Redirect("Main.aspx"); //跳轉主界面
- }
- else{
- Response.Write("未登錄"); //否則提示未登錄
- }
- }
- /// <summary>
- /// 用戶登錄驗證
- /// </summary>
- /// <param name="userName">用戶名</param>
- /// <param name="userPassword">用戶密碼</param>
- /// <returns>bool</returns>
- private bool UserVolidate(String userName, String userPassword)
- {
- //連接數據庫
- SqlConnection con = new SqlConnection("server=.;database=User;uid=sa;pwd=123456;");
- con.Open();
- SqlCommand cmd=new SqlCommand ("select * from UserInfo where UserName="+userName +" and Password="+userPassword );
- int num=cmd.ExecuteNonQuery ();
- if (num>0)
- {
- return true;
- }
- else
- {
- return false;
- }
- }
- }
2. 跳轉界面的代碼:(防止用戶通過URL直接跳轉到該界面,每次界面都要進行判斷)
- public partial class Main : System.Web.UI.Page
- {
- //窗體加載
- protected void Page_Load(object sender, EventArgs e)
- {
- //根據Session對象保存的用戶登陸狀態判斷用戶是否登錄
- if (Session["UserFlag"].ToString () == "false")
- {
- //如果未登錄,則直接跳轉到登錄界面
- Response.Redirect ("Login.aspx");
- }
- }
- }
解決方案二:通過提供一個中介judge.aspx界面,每個跟賬戶有關的界面跳轉之前都跳轉到該界面,通過該界面加載的時判斷用戶的登錄狀態。
1. 登錄頁面代碼不變
2. judge.aspx頁面代碼:
- public partial class judge : System.Web.UI.Page
- {
- protected void Page_Load(object sender, EventArgs e)
- {
- //對Session對象進行判斷用戶的狀態
- if (Session["flag"].ToString()=="false")
- {
- Response.Write("未登錄");
- }
- /*else
- {
- &nbs