自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

程序員看淘寶,如何用Session保存用戶狀態(tài)

開發(fā) 后端
每個(gè)用戶都有一個(gè)Session對(duì)象相對(duì)應(yīng),當(dāng)用戶想要跳轉(zhuǎn)到任意跟賬戶有關(guān)的界面(已買到的寶貝頁面),每個(gè)頁面加載的時(shí)候都要判斷Session對(duì)象保存的用戶狀態(tài)。

網(wǎng)上購物已經(jīng)成為現(xiàn)在生活不可缺少的一部分。我們上淘寶只是為了消費(fèi),今天換一個(gè)角度,用程序員的眼光看看淘寶。

如上圖:

情況一:當(dāng)打開一些和賬戶有關(guān)的網(wǎng)頁,檢測用戶沒有登錄,系統(tǒng)自動(dòng)會(huì)跳轉(zhuǎn)到登錄界面。

情況二:當(dāng)檢測到已經(jīng)有用戶登錄,頁面會(huì)自動(dòng)跳轉(zhuǎn)到目的頁面。

問題:系統(tǒng)如何檢測用戶是否登錄,如何保存用戶的登錄狀態(tài)?

下面說說自己的理解:利用Session保存用戶狀態(tài),

解決方案一:每個(gè)用戶都有一個(gè)Session對(duì)象相對(duì)應(yīng),當(dāng)用戶想要跳轉(zhuǎn)到任意跟賬戶有關(guān)的界面(已買到的寶貝頁面),每個(gè)頁面加載的時(shí)候都要判斷Session對(duì)象保存的用戶狀態(tài)。

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;//首先設(shè)置會(huì)話值UserFlage表示用戶是否登錄  
  9.            if (UserVolidate(Login1.UserName, Login1.Password) == true)//調(diào)用自定義方法,驗(yàn)證用戶是否登錄成功  
  10.            {  
  11.                Session["UserFlag"] = true//登錄成功  
  12.                e.Authenticated = true;  
  13.                Response.Redirect("Main.aspx"); //跳轉(zhuǎn)主界面  
  14.            }  
  15.            else{  
  16.                Response.Write("未登錄"); //否則提示未登錄  
  17.            }  
  18.        }  
  19.        /// <summary>  
  20.        /// 用戶登錄驗(yàn)證  
  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.            //連接數(shù)據(jù)庫  
  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. 跳轉(zhuǎn)界面的代碼:(防止用戶通過URL直接跳轉(zhuǎn)到該界面,每次界面都要進(jìn)行判斷)

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

解決方案二:通過提供一個(gè)中介judge.aspx界面,每個(gè)跟賬戶有關(guān)的界面跳轉(zhuǎn)之前都跳轉(zhuǎn)到該界面,通過該界面加載的時(shí)判斷用戶的登錄狀態(tài)。

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.             //對(duì)Session對(duì)象進(jìn)行判斷用戶的狀態(tài)  
  6.  
  7.             if (Session["flag"].ToString()=="false")  
  8.             {  
  9.                 Response.Write("未登錄");  
  10.             }  
  11.  
  12.             /*else  
  13.             {  
  14.                 Response.Redirect("Main.aspx");//加上這句話會(huì)造成死循環(huán)  
  15.             }*/ 
  16.         }  
  17.     } 

3. 跳轉(zhuǎn)界面代碼:

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

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

補(bǔ)充:

Server對(duì)象

語法:Server.Execute(path)

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

Session對(duì)象

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

原文鏈接:http://blog.csdn.net/yinjingjing198808/article/details/7832769

【編輯推薦】

  1. 各自為政:ASP.NET實(shí)現(xiàn)團(tuán)隊(duì)分工的思考
  2. 仿造百度實(shí)現(xiàn)基于Lucene.net全文檢索
  3. 發(fā)布一個(gè)自己寫的企業(yè)站源碼
  4. ASP.NET中常用的幾種身份驗(yàn)證方式
  5. ASP.NET中使用App_Code文件夾的異常
責(zé)任編輯:張偉 來源: yinjingjing198808的博客
相關(guān)推薦

2016-04-28 11:17:33

互動(dòng)出版網(wǎng)

2018-01-09 20:29:15

程序員日本程序員中國程序員

2011-05-10 13:37:53

程序員

2011-05-30 13:43:16

OOD編程對(duì)象

2012-09-19 09:21:59

2012-09-20 09:19:30

程序員非程序西方程序員

2011-05-30 14:23:11

設(shè)計(jì)模式程序員

2019-01-18 09:32:57

2012-11-12 09:35:24

開發(fā)工具程序員IE6

2011-07-19 13:04:22

網(wǎng)絡(luò)協(xié)議網(wǎng)絡(luò)編程

2020-09-23 12:30:26

session

2013-12-30 10:08:13

2010-10-18 11:18:44

程序員

2014-03-04 09:43:23

程序員外包

2014-09-22 09:42:54

程序員

2013-08-20 09:33:59

程序員

2012-03-06 09:22:46

程序員

2020-04-04 20:59:28

程序員技術(shù)開發(fā)

2015-04-09 13:36:13

程序員大齡程序員出路
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)