萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> asp編程 >> 程序員看淘寶,如何用Session保存用戶狀態

程序員看淘寶,如何用Session保存用戶狀態

 網上購物已經成為現在生活不可缺少的一部分。我們上淘寶只是為了消費,今天換一個角度,用程序員的眼光看看淘寶。

如上圖:

情況一:當打開一些和賬戶有關的網頁,檢測用戶沒有登錄,系統自動會跳轉到登錄界面。

情況二:當檢測到已經有用戶登錄,頁面會自動跳轉到目的頁面。

問題:系統如何檢測用戶是否登錄,如何保存用戶的登錄狀態?

下面說說自己的理解:利用Session保存用戶狀態,

解決方案一:每個用戶都有一個Session對象相對應,當用戶想要跳轉到任意跟賬戶有關的界面(已買到的寶貝頁面),每個頁面加載的時候都要判斷Session對象保存的用戶狀態。

1. 登錄界面的代碼:

  1. public partial class Login : System.Web.UI.Page  
  2.    {  
  3.        protected void Page_Load(object sender, EventArgs e)  
  4.        {  
  5.        }  
  6.        protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)  
  7.        {  
  8.            Session["UserFlag"] = false;//首先設置會話值UserFlage表示用戶是否登錄  
  9.            if (UserVolidate(Login1.UserName, Login1.Password) == true)//調用自定義方法,驗證用戶是否登錄成功  
  10.            {  
  11.                Session["UserFlag"] = true; //登錄成功  
  12.                e.Authenticated = true;  
  13.                Response.Redirect("Main.aspx"); //跳轉主界面  
  14.            }  
  15.            else{  
  16.                Response.Write("未登錄"); //否則提示未登錄  
  17.            }  
  18.        }  
  19.        /// <summary>  
  20.        /// 用戶登錄驗證  
  21.        /// </summary>  
  22.        /// <param name="userName">用戶名</param>  
  23.        /// <param name="userPassword">用戶密碼</param>  
  24.        /// <returns>bool</returns>  
  25.        private bool  UserVolidate(String userName, String userPassword)  
  26.        {  
  27.            //連接數據庫  
  28.            SqlConnection con = new SqlConnection("server=.;database=User;uid=sa;pwd=123456;");  
  29.            con.Open();  
  30.            SqlCommand cmd=new SqlCommand ("select * from UserInfo where UserName="+userName +" and Password="+userPassword );  
  31.            int num=cmd.ExecuteNonQuery ();  
  32.            if (num>0)  
  33.            {  
  34.               return true;  
  35.            }  
  36.            else 
  37.            {  
  38.                return false;  
  39.            }  
  40.        }  
  41.          
  42.    } 

2. 跳轉界面的代碼:(防止用戶通過URL直接跳轉到該界面,每次界面都要進行判斷)

  1. public partial class Main : System.Web.UI.Page  
  2.    {  
  3.        //窗體加載  
  4.        protected void Page_Load(object sender, EventArgs e)  
  5.        {  
  6.            //根據Session對象保存的用戶登陸狀態判斷用戶是否登錄  
  7.            if (Session["UserFlag"].ToString () == "false")  
  8.            {  
  9.                //如果未登錄,則直接跳轉到登錄界面  
  10.                Response.Redirect ("Login.aspx");  
  11.            }  
  12.        }  
  13.    } 

解決方案二:通過提供一個中介judge.aspx界面,每個跟賬戶有關的界面跳轉之前都跳轉到該界面,通過該界面加載的時判斷用戶的登錄狀態。

1. 登錄頁面代碼不變

2. judge.aspx頁面代碼:

  1. public partial class judge : System.Web.UI.Page  
  2.     {  
  3.         protected void Page_Load(object sender, EventArgs e)  
  4.         {  
  5.             //對Session對象進行判斷用戶的狀態  
  6.  
  7.             if (Session["flag"].ToString()=="false")  
  8.             {  
  9.                 Response.Write("未登錄");  
  10.             }  
  11.  
  12.             /*else  
  13.             {  
  14.       &nbs
copyright © 萬盛學電腦網 all rights reserved