日期:2014-05-18  浏览次数:20449 次

如何用Session禁止重复登录问题
做了一个网页,用户要登录后才能访问出主页外的网页,登录注册框在主页一角。登录框下边有一个linkbutton,为退出登录。我的问题就是,如果用户已登录,必须点击退出登陆后才能进行下次登录,请问怎么用session控制,这是我的代码,大侠帮忙改下!谢谢!!

我是这么想的:会员登录成功,置Session["user"] = "ok" ;管理员登录成功,
置Session["user"] = "abc",当再次登录时, 如发现Session["user"] = "ok"或者Session["user"] = "abc"即说明还没有退出登录。但如果将判断放在程序首段,就会报错,没有实例化,请问怎么解决??

退出登录代码:if (Session["user"] == null)
  { 
  this.Label4.Text = "您尚未登陆";
  }
  else
  {
  Session.Abandon();
  Response.Redirect("退出登陆.aspx");
  }


登录click事件:
protected void Button2_Click(object sender, EventArgs e)
  {
  //if (Session["user"].ToString() == "ok" || Session["user"].ToString() == "abc")
  //{
  // Page.ClientScript.RegisterStartupScript(this.GetType(), "onclick", "<script>alert('您已经登录,请先退出!');</script>");
  //}
  //else 
  //{ 
  SqlConnection cn = new SqlConnection();
  cn.ConnectionString = "Data Source=localhost;Initial Catalog=电影信息交流系统;Integrated Security=True";
  try
  {
  cn.Open();
  SqlCommand cmd = new SqlCommand();
  cmd.Connection = cn;
  if ("会员" == DropDownList1.Text)
  {
  this.LinkButton1.Visible = true;
  cmd.CommandText = "select * from 用户信息表 where 注册用户名 = '" + TextBox1.Text + "'and 密码='" + TextBox2.Text + "'";
  SqlDataReader dr = cmd.ExecuteReader();
  if (dr.Read())
  {
  Session["user"] = "ok";
  Response.Redirect("欢迎会员.aspx");
  }
  else
  {
  Page.ClientScript.RegisterStartupScript(this.GetType(), "onclick", "<script>alert('错误!请重新输入用户名或密码!');</script>");
  }
  dr.Close();
  }
  else if ("管理员" == DropDownList1.Text)
  {
  cmd.CommandText = "select * from 管理员表 where 管理员用户名 = '" + TextBox1.Text + "'and 密码='" + TextBox2.Text + "'";
  SqlDataReader dr = cmd.ExecuteReader();
  if (dr.Read())
  {
  Session["user"] = "abc";
  MessageBox.Show("欢迎管理员");
  }
  else
  { 
  Page.ClientScript.RegisterStartupScript(this.GetType(), "onclick", "<script>alert('错误!请重新输入用户名或密码!');</script>");
  }
  dr.Close();
  }
  }
  catch (SqlException ex)
  {
  MessageBox.Show(ex.Message);
  }
  cn.Close();
}


------解决方案--------------------
Session是面向一个连接的,所以不可能用来实现你的目的
你可以用Application,但是耗内存

一般是登录后,把数据库中一个字段置1,然后退出登录或Session TimeOut时置回0

别处登录时,如果那个字段已经是1,就不允许登录。
------解决方案--------------------