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 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)