如题,这么做的到?谢谢大家  。
集思广益.....

解决方案 »

  1.   


    關閉流覽器也有觸發事件的,在事件中通過ajax去update 數據庫。
    這個方法有一個缺陷就是流覽器非正常關閉,數據庫中的字段不會改變,建議在表中加一個“最後登入時間”的字段,如果這次的登入時間-上次的登入時間>1h,就默認上次已經離線了。哎……其實這樣做也有缺陷。
    看看別人還有沒有好辦法。
      

  2.   


    1.数据库专用表如LoginLog,存储登陆状态,记录登陆状态,登陆时间,IP,最后一次操作时间,客户端类型。
    2.当用户有操作时,视作有操作,更新数据库中的LoginLog表,记录最后一次操作时间。
    3.JS端的超时判断,页面存在计时器,当超过规定时间,如30分钟,无操作时,AJAX调用后台程序注销,更新LoginLog中的登陆状态,画面跳转(是否用Ajax自己判断)
    4.页面关闭,AJAX调用后台程序注销...(和5楼的方法一致。)
    5.登录时的该用户是否在使用的判断,LoginLog查询,用户的登录状态,以及是否超时等等。
    6.(备用)登录用户访问后台页面时,根据IP,客户端类型,到数据库中去判断其合法性。
      

  3.   

    登录时,检测application里有没有此帐号的唯一标识,如果没有就可以登录,然后再application加入此帐号的唯一标识,如果有就不能登录
      

  4.   

    protected void Session_Start(object sender, EventArgs e)
            {
                if (Request.IsLocal && ApplicationInstance.AppSettings.LocalAutoLogin)
                {
                    if (userService == null) userService = Dare.DN.Services.Application.Instance.GetDbService<UserService>();
                    userService.Login(0, ApplicationInstance.AppSettings.AdminName, ApplicationInstance.AppSettings.AdminPassword);
                }
            }
      

  5.   

    Global.asax.csprotected void Session_Start(object sender, EventArgs e)
      {
      if (Request.IsLocal && ApplicationInstance.AppSettings.LocalAutoLogin)
      {
      if (userService == null) userService = Dare.DN.Services.Application.Instance.GetDbService<UserService>();
      userService.Login(0, ApplicationInstance.AppSettings.AdminName, ApplicationInstance.AppSettings.AdminPassword);
      }
      }
      

  6.   

    建议不这么做,B/S架构很难像C/S架构那样来控制登陆唯一。
    因为是HTTP无状态连接的。你很难保证登陆者是否是非正常下线。
    万一他上网睡着了,长时间没有操作,Timeout了
      

  7.   

    大家说了这么多但是 没考虑到根本上的问题,问题是 用户 非正常退出,如果 用任务管理器 关闭浏览器 你怎么去 update 状态?
      

  8.   

    session 加cookie  保存用户状态