用程序员的眼光看淘宝-如何用Session保存用户状态
2012-08-05 21:07
246 查看
网上购物已经成为现在生活不可缺少的一部分。我们上淘宝只是为了消费,今天换一个角度,用程序员的眼光看看淘宝。
如上图:
情况一:当打开一些和账户有关的网页,检测用户没有登录,系统自动会跳转到登录界面。
情况二:当检测到已经有用户登录,页面会自动跳转到目的页面。
问题:系统如何检测用户是否登录,如何保存用户的登录状态?
下面说说自己的理解:利用Session保存用户状态,
解决方案一:每个用户都有一个Session对象相对应,当用户想要跳转到任意跟账户有关的界面(已买到的宝贝页面),每个页面加载的时候都要判断Session对象保存的用户状态。
1. 登录界面的代码:
2. 跳转界面的代码:(防止用户通过URL直接跳转到该界面,每次界面都要进行判断)
解决方案二:通过提供一个中介judge.aspx界面,每个跟账户有关的界面跳转之前都跳转到该界面,通过该界面加载的时判断用户的登录状态。
1. 登录页面代码不变
2. judge.aspx页面代码:
3. 跳转界面代码:
总结:两种解决方案原理相同,通过Session对象保存用户状态,不同页面都可以通过访问该用户的Session对象的会话值来判断该用户的状态。解决方案二只是简化了判断过程,通过Server对象的Execute方法先执行中介判断界面,然后回归到原程序执行顺序。
补充:
Server对象
语法:Server.Execute(path)
用途:这个方法是 IIS5.0 新增的功能,用途类似程序语言中的函数调用,也就是说,您可以在 ASP 程序中使用 Server.Execute(path)方法调用 Path 指定的 ASP 程序,待被调用的程序执行完毕之后再返回原来的程序,继续执行接下来的指令。
Session对象
在网站中,每个新访问的用户都将产生自己的session(回话)对象。这个session对象在服务器端进行管理
,只能为当前访问的用户服务。如果另一个用户进入网站,也将拥有自己的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对象即使同名,也不能共享。
相关文章推荐
- PHP中如何使用session实现保存用户登录信息
- webservice中使用Session保存用户状态
- 程序员之网络安全系列(二):如何安全保存用户密码及哈希算法
- 如何在Service层获取用户session中保存的用户信息的方法(Filter+ThreadLocal)
- php中如何同时使用session和cookie来保存用户登录信息
- 如何在Service层获取用户session中保存的用户信息的方法
- 当用户禁用了cookies时 session如何保存记录
- php中如何同时使用session和cookie来保存用户登录信息
- PHP中如何使用session实现保存用户登录信息
- SSH框架z中登录功能如何将用户保存在session
- 使用session保存用户登录状态(实现单点登录)
- 如何获得discuz得用户session登陆状态
- 如何在asp.net中保存用户状态
- Cookies+Session保存用户登陆状态
- 使用加密cookie代替session验证用户登录状态
- putty 保存用户session
- Android基础知识记录|面试常见问题:activity被回收,如何保存回收前的状态
- Volley获取和发送sessionid保持用户登录状态
- Spring Boot 负载均衡之外置session状态保存
- JSP+Servlet实现用户登录状态的保存