zhaob 2009-11-12 10:18
浏览 319
已采纳

如何一台机器只有一个用户登录

由于session原因,一台机器上,如果有两个用户同时登陆,都会显示后一个用户的信息,如何能让这一台机器只登录一个用户,向163邮箱那样,当有第二个用户登录时,第一个用户自动被踢出。我用的是IE8
[b]问题补充:[/b]
能举个例子么,如何判断,如何remove掉
[b]问题补充:[/b]
我是说一台机器只能登录一个用户,而不是一个用户只能登录一次,大家有什么好方法么,
[b]问题补充:[/b]
不好意思啊energykey ,可能是我说的不太明白,我的意思是让一台机器只能登录一个账户,而不是让所有浏览器都像IE8 一样,后一个用户一登录,前一个就踢掉,不能再操作。由于系统有权限限制,是为了安全这么做的
[b]问题补充:[/b]
太谢谢energykey了, 我还想问的是,存放session可以通过销毁session来踢掉用户,但是存放IP的话如何踢掉第一个登录的用户呢
[b]问题补充:[/b]
哈喽energykey,我昨天试了你说的方法,可是由于两个用户是共用一个session,所以如果第一个用户把session销毁的话,那第二个用户也不能再用session了,会报Session already invalidated错误
[b]问题补充:[/b]
问题已解决,谢谢energykey啦!

  • 写回答

9条回答 默认 最新

  • Ryankay 2009-11-13 10:22
    关注

    API:
    [code="xml"]
    invalidate
    public void invalidate()
    Invalidates this session then unbinds any objects bound to it.
    Throws:
    IllegalStateException - if this method is called on an already invalidated session
    [/code]

    注意这句话,

    使这个session“[color=red]失效[/color]”,然后将任何绑定到它上面的实体卸载(清空)。

    所以,怎么去理解这个失效?这个失效并不是销毁,而是将session从容器中剥离开来,所以如果你设置断点跟踪就会发现,执行invalidate()后的session依然存在,详细你可以参考我的一篇文章:
    [url]http://energykey.iteye.com/blog/460679[/url]

    而至于你引发的错误,[quote]
    Throws:
    IllegalStateException - if this method is called on an already invalidated session
    [/quote]
    这里已经说清楚了,如果对一个已经invalidated得session执行invalidate()就会触发这个错误。有可能你没有将新的session存到全局变量中。

    值得一提的是,如果你细心一点,会发现在同一浏览器下调试的话,invalidate()的session的ID和request.getSession()的ID是一样的,但其实他们根本就是两个对象,没有任何关系,因为前者是游离态的,后者是有状态的。详细你去看我的文章吧,里面说的很清楚。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(8条)

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器