none
再来挑战单点登录!欢迎各位指点。 RRS feed

  • 问题

  • 案例:
       现在有个用户名为player的账号登录了,我用一个变量保存了(在数据库里面写字段表示,或者用application等保存都可以)player的状态为登录。
      
       现在又有人用player登录,那么我会检测player的状态看他是否为登录,是登陆,那么我给出提示。
     
       现在不小心电脑重启了,属于异常退出,没有把player的状态改为未登录。
     
       那么当player在别的地方登录,就再登不上去了,因为登录状态还是一直保持的登录。

    那么现在问题来了:
       向刚才那样异常退出,登录状态没有改变回来的情况,player在别的地方再次登陆(这时player根本没有处于登录状态),怎么可以检查到该账户已经掉线或断开了,并把登陆状态改成未登入和让player登录。
    2009年4月21日 9:47

答案

  • 简单的做法:你可以做个ajax定时器,每1分钟去服务器端更新状态,如果超过一分钟没有更新,则别人登录的时候就可以登录。因为Web程序是无状态的,必须客户端与服务器端进行通讯才能进行进行识别
    孟宪会
    2009年4月21日 10:03
    版主
  • 把sessionID保存到DB里面去,begin request的时候去checkDB保存的是否跟当前的一样,不一样的话就转到在其它地方重新登陆的错误画面。
    session timeout的时候,把DB的session清空

    登陆的时候,如果发现在session id不是空,提示“您可能在其它地方已经登陆本系统,如果继续的话,原来的登陆将被取消,是否继续?”如果用户继续的话,就把session id改成当前的。如果session为空,直接保存就ok了


    微软认证程序开发专家:Web Developer (MCPD: Web Developer)
    2009年4月22日 1:54

全部回复

  • 简单的做法:你可以做个ajax定时器,每1分钟去服务器端更新状态,如果超过一分钟没有更新,则别人登录的时候就可以登录。因为Web程序是无状态的,必须客户端与服务器端进行通讯才能进行进行识别
    孟宪会
    2009年4月21日 10:03
    版主
  • 主要是不想去设置定时器去不断的更新数据库,我想避免和数据库进行交换。

    你提到了个客户端和服务器端进行通讯,我比较想了解这个方法,可以介绍下吗?怎么从服务器发送一个通讯连检测那个连接是否断开。

    2009年4月21日 10:14
  • 一般是由客户端主动请求服务器,不是服务器发消息给客户端,当然你用activex+socket例外,
    你可以用一个隐藏的iframe或是用一个ajax timer定时的请求一个页面,比如说1分钟,被请求的这个页面记录每一个用户的最后请求时间,
    当用户登陆时判断登陆的帐是的最近的登陆时间与当前时间相比是否少于1分钟,小于就提示当前帐号已登陆的信息,大于当然就可以登陆了,要处理的细节还是满多的,希望我的描述对你有帮助

    知识改变命运,奋斗成就人生!
    2009年4月21日 10:42
    版主
  • 想实现这种效果,最方便的也只有采用心跳的方法,每隔一段时间通知服务器,我还活着。
    至于说你不想去太多的操作数据库,那么你可以在用户登陆以后,把用户部分信息缓存在内存中,并记录当前时间戳,当心跳过来只需要与缓存中的状态进行对比。只有当检用户主动退出,或检测不到心跳时,才去更新数据库。


    Wright
    2009年4月22日 1:50
  • 把sessionID保存到DB里面去,begin request的时候去checkDB保存的是否跟当前的一样,不一样的话就转到在其它地方重新登陆的错误画面。
    session timeout的时候,把DB的session清空

    登陆的时候,如果发现在session id不是空,提示“您可能在其它地方已经登陆本系统,如果继续的话,原来的登陆将被取消,是否继续?”如果用户继续的话,就把session id改成当前的。如果session为空,直接保存就ok了


    微软认证程序开发专家:Web Developer (MCPD: Web Developer)
    2009年4月22日 1:54