程序员看淘宝,如何用Session保存用户状态

作者:   出处:互联网   2015-07-06 11:03:44   阅读:2

每个用户都有一个Session对象相对应,当用户想要跳转到任意跟账户有关的界面(已买到的宝贝页面),每个页面加载的时候都要判断Session对象保存的用户状态。

网上购物已经成为现在生活不可缺少的一部分。们上淘宝只是为了消费,今天换一个角度,用程序员的眼光看看淘宝。


 

如上图:


 

情况一:当打开一些和账户有关的网页,检测用户没有登录,系统自动会跳转到登录界面。


 

情况二:当检测到已经有用户登录,页面会自动跳转到目的页面。


 

问题:系统如何检测用户是否登录,如何保存用户的登录状态?


 

下面说说自己的理解:利用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  {  Response.Redirect( Main.aspx //加上这句话会造成死循环  }*/ }  } 


 

3. 跳转界面代码:


 

public partial class Main : System.Web.UI.Page  {  protected void Page_Load(object sender, EventArgs e)  {  //跳转页面必须经过判断,防止直接登录该页面,而不进行登录。  Server.Execute( judge.aspx );//通过执行Server对象的Execute方法  }  } 


 

总结:两种解决方案原理相同,通过Session对象保存用户状态,不同页面都可以通过访问该用户的Session对象的会话值来判断该用户的状态。解决方案二只是简化了判断过程,通过Server对象的Execute方法先执行中介判断界面,然后回归到原程序执行顺序。

Server对象


 

语法:Server.Execute(path)


 

用途:这个方法是 IIS5.0 新增的功能,用途类似程序语言中的函数调用,也就是说,您可以在 ASP 程序中使用 Server.Execute(path)方法调用 Path 指定的 ASP 程序,待被调用的程序执行完毕之后再返回原来的程序,继续执行接下来的指令。


 

Session对象


 

在网站中,每个新访问的用户都将产生自己的session(回话)对象。这个session对象在服务器端进行管理,只能为当前访问的用户服务。如果另一个用户进入网站,也将拥有自己的session对象,两个用户的session对象即使同名,也不能共享。

Copyright© 2006-2015 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 渝ICP备12000264号 法律顾问:元炳律师事务所
客服软件
live chat