日期:2014-05-17  浏览次数:20572 次

为什么系统要求同一个用户在同一时间只能登录一次不成功
希望实现系统要求同一个用户在同一时间只能登录一次,但没成功(可以用一个账号同时成功登录系统),帮我看看错误出在哪里?
一、Global.asax中的代码:
  void Application_Start(object sender, EventArgs e)
  {
  Application["YZTonline"] = 0;//程序刚开始的时候申请一个全局变量

  }

  void Session_Start(object sender, EventArgs e)
  {
  Session.Contents["username"] = 0;
  }

  void Session_End(object sender, EventArgs e)
  {
  string strUserId = Session["username"] as string;
  ArrayList list = Application.Get("GLOBAL_USER_LIST") as ArrayList;
  if (strUserId != null && list != null)
  {
  list.Remove(strUserId);
  Application.Lock();
  Application["YZTonline"] = list.Count;
  Application.Add("GLOBAL_USER_LIST", list);
  Application.UnLock();
  }

  }

二、Web.Config中的配置代码:
<system.web>
  <globalization requestEncoding="gb2312" responseEncoding="gb2312"/>
  <!--网页页面无乱码-->

<sessionState mode="InProc" cookieless="true"/>
<compilation debug="true" targetFramework="4.0">
</compilation>

三、登录验证代码:
  string strUserId = this.txtusername.Text.ToString().Trim();
  ArrayList list = Application.Get("GLOBAL_USER_LIST") as ArrayList;
  if (list == null)
  {
  list = new ArrayList();
  }
  for (int i = 0; i < list.Count; i++)
  {
  if (strUserId == (list[i] as string))
  {
  Response.Write("<script>window.alert('您已经登录系统。如非“安全退出”方式关闭系统,请稍候片刻再尝试登录。');</script>");
  return;
  }
  }
  long KeyNumber = Cooperate_Office.Old_App_Code.SmartWebServerScript.GetUserNumber();
  if (list.Count >= KeyNumber)
  {
  Response.Write("<script>window.alert('当前登录的用户数已经达到开发商允许最大登录数,请与开发商联系。');</script>");
  return;
  }
  list.Add(strUserId);
  Application.Lock();
  Application.Add("GLOBAL_USER_LIST", list);  
  Application["YZTonline"] = Convert.ToInt32(Application["YZTonline"]) + 1;
  Application.UnLock();

我自己看了一下好像Application.Add("GLOBAL_USER_LIST", list)没有正确执行,list中没有数据。

------解决方案--------------------
同一个用户在同一时间只能登录一次?

楼主意思是 如果用户登录成功后,就不能再登录了吗?

可以登录成功后,记录一个session, 如果用户再登录,判断这个session是否有值即可