用户表中有一个状态字段,判断用户是否登陆用户登陆时修改状态当用户退出的时候修改状态用户登陆时当状态为已登陆则不进行登陆操作
求用户退出的时候修改状态的解决方案
分不够再开帖
先谢过!

解决方案 »

  1.   

    如果正常点击按钮统退出或执行session_end就可修改数据库中字段
    否则就可记录用户最后操作时间,如果超过规定时间,用户下线,通过定时执行修改用户状态
      

  2.   

    Session End的时候修改
    并且页面关闭的时候也用Ajax提交退出请求
      

  3.   

    按楼主描述的不是单点登录(SSO),只是同一用户名只能登录一次。
      

  4.   

      你的程序里面肯定有自动刷新页面吧?   
      用Apllication或者数据库或者文件都可以,   
      比如用application   
      规定每隔n秒,每个用户都要清空并刷新一下Apllication变量,里面存放所有在线用户id,同时比较刷新前后的差异。   
      比如:Apllication("id")="1-3-5-23-56-23-90"表明这几个用户在线。   
      如果有一个人id=3吊线了,那么在几个n秒之内这个变量里面他就没提交自己的ID,就会   
      Apllication("id")="1-5-23-56-23-90"   
      那么任何一个用户都可以把他从数据库里面自动还原,比如K个n时间内都没出现id=3,就认为他掉了。   
      如果有人开始还原他了,那么别人就不再还原他。这个好判断。   
      我这种做法,会增加服务器负担,而且用户也要不停的刷新。适合对实时要求高,用户少的程序。误差是<K*n,K就是你设定的次数。   
      中间还有很多关键技巧:   
      还要用几个辅助全局变量,锁定和开锁apllication。   
      还要存放上k-1次的Apllication("id")   
      还要靠global.sa文件,最后托一下底,防止万一在线没人的情况。
      

  5.   

    数据库表中多出一个字段 用户每次登陆更新该字段  并把该字段存在  session 或 cookie中获取用户信息的时候匹配该字段这样用户就只能单登陆了异地登陆的话,后面登陆的会把前面登陆的 挤掉
      

  6.   

    我做过这个,在我以前的一个帖子里面,你可以通过一个时间字段来判断,因为如果你要是用session_end的话,不能准确的执行,比如是IE死掉了,或者重启了,等等,所以只要利用ajax不停的更新这个时间字段,然后再不停的读取这个字段,如果发现这个字段有一段时间没变(超过你自己设定的时间),就认为应该重新登录,这个是比较理想的实现方式
      

  7.   

    一定要极端保证可靠性的话
    用Ajax保持心跳包发送的可行性比较高