程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> ASP編程 >> 關於ASP編程 >> 程序員看淘寶,如何用Session保存用戶狀態

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

編輯:關於ASP編程

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

    如上圖:

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

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

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

    下面說說自己的理解:利用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.                 Response.Redirect("Main.aspx");//加上這句話會造成死循環  
    15.             }*/ 
    16.         }  
    17.     } 

    3. 跳轉界面代碼:

    1. public partial class Main : System.Web.UI.Page  
    2.     {  
    3.         protected void Page_Load(object sender, EventArgs e)  
    4.         {  
    5.             //跳轉頁面必須經過判斷,防止直接登錄該頁面,而不進行登錄。  
    6.             Server.Execute("judge.aspx");//通過執行Server對象的Execute方法  
    7.         }  
    8.     } 

    總結:兩種解決方案原理相同,通過Session對象保存用戶狀態,不同頁面都可以通過訪問該用戶的Session對象的會話值來判斷該用戶的狀態。解決方案二只是簡化了判斷過程,通過Server對象的Execute方法先執行中介判斷界面,然後回歸到原程序執行順序。

    補充:

    Server對象

    語法:Server.Execute(path)

    用途:這個方法是 IIS5.0 新增的功能,用途類似程序語言中的函數調用,也就是說,您可以在 ASP 程序中使用 Server.Execute(path)方法調用 Path 指定的 ASP 程序,待被調用的程序執行完畢之後再返回原來的程序,繼續執行接下來的指令。

    Session對象

    在網站中,每個新訪問的用戶都將產生自己的session(回話)對象。這個session對象在服務器端進行管理,只能為當前訪問的用戶服務。如果另一個用戶進入網站,也將擁有自己的session對象,兩個用戶的session對象即使同名,也不能共享。

            :更多精彩教程請關注三聯電腦教程欄目,三聯電腦辦公群:189034526歡迎你的加入

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved