网上购物已经成为现在生活不可缺少的一部分。我们上淘宝只是为了消费,今天换一个角度,用程序员的眼光看看淘宝。
如上图:
情况一:当打开一些和账户有关的网页,检测用户没有登录,系统自动会跳转到登录界面。
情况二:当检测到已经有用户登录,页面会自动跳转到目的页面。
问题:系统如何检测用户是否登录,如何保存用户的登录状态?
下面说说自己的理解:利用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
- {
- &nbs