我在数据库中的用户表中创建了一个字段以表示用户的在线状态,在用户登陆的时候,将状态置为在线,当用户点击退出按钮时,改写该状态。但是这样一来,一旦用户关闭浏览器,这时无法改写状态字,这样用户就再也不能登陆了。这个问题怎么解决呢?(用户要求一定要在数据库中存储用户的在线状态)谢谢各位高手!

解决方案 »

  1.   

    使用Session来进行操作,在Session_End事件中将用户标识清除。
      

  2.   

    请参考
    http://dev.csdn.net/develop/article/35/35248.shtm
      

  3.   

    我的决解方案是在要被关闭的页面加一段代码(用java,页面unload事件!),代码的内容就是弹出一个新页面,在执行一面代码完成用户退出的有关操作!
      

  4.   

    在global.asax里写
    protected void Session_End(Object sender, EventArgs e)
    {
    string sqlA,sqlB,sqlC;
    sqlA="delete 系统设置 where about='计数器'";
    sqlB="insert into 系统设置(about,content) values('计数器','"+Application["visitedcount"]+"')";
    sqlC="update 登陆日志 set 是否在线=0 where ryid="+Convert.ToInt32(Session["ryid"]); adohelper myado=new adohelper();
    try
    {
    myado.ExecuteUpdate(sqlA);
    myado.ExecuteUpdate(sqlB);
    myado.ExecuteUpdate(sqlC);
    }
    catch
    {
    }
    finally
    {
    Application.Lock();
    Application["online"]=(int)Application["online"]-1;
    Application.UnLock();
    }
    }
      

  5.   

    我怎样在global.asax取到一个Session值?
      

  6.   

    第一无法得知
    第二每个页面都加检查用户函数,如果用户访问更新用户在线时间
    第三设置超时时间(建议放在web.config)中,超过时间用户不访问视作离线
      

  7.   

    在页面的onbeforeUnload事件里写动作:
    onbeforeunload="document.form1.action='yourPage?exec=unload';document.form1.submit();"
    这样在页面被关闭时,会有一次回传服务器的动作。
      

  8.   

    我有一方案:建一表,一字段.值为0表示不在线:
    web主页面打开是定时更新这一字段为3;如每2分钟;如点击写的关闭按钮事件则直接将字段更新为0
    在服务器端,写一win窗本程序,每2分钟将这字段值>0的减1,当关闭6分钟后就减为0即不在线.
    这样在登陆是检查字段值就可,如>0表示在线或未正常退出.则等6分钟后可以重新进入系统.