stuart8
stuart8
2011-01-11 15:52
浏览 768
已采纳

点单登出如何保证清除的是某一个具体用户的session?

在认证中心登出后,调用各个Web应用的登出接口,清除登出用户的session。
问题是:如何调用,才能让Web应用知道清除哪个sessionid的session信息呢?
用是在每次创建session的时候保存到一个映射里面,id为用户的标示,然后收到退出消息的时候,找到该用户id对应的HttpSession,然后validate?我怎么觉得这是我们自己调用的销毁HttpSession副本,而不是Web服务器内存里的session销毁呢?用Web Service和直接调用url接口其实是一样的,本质问题是如何让接口完成消除特定用户的session的问题。求指教。。。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

3条回答 默认 最新

  • lang_shao
    lang_shao 2011-01-11 16:22
    已采纳

    [quote]jsessionid可以得到,但是如何得到它代表的session进而去valiate这个才是关键。[/quote]
    直接将jsessionid作为key,HttpSession作为value,存到一个Map中(注意要是线程安全的,不要序列化它,就一直在内存中)。取这个HttpSession出来invalidate()就行了。

    点赞 评论
  • lang_shao
    lang_shao 2011-01-11 16:10

    可以这样做:
    1. 用户在认证中心登录时,将用户名传到Web应用,Web应用自动认相应的用户登录,同时记下用户名和jsessionid。
    2. 用户在认证中心退出时,将用户名传到Web应用,Web应用找到相应的jsessionid,将此jsessionid标记为已退出。
    3. Web应用再加一个Filter,在每一个请求之前先检查这个jsessionid是否已退出。

    点赞 评论
  • lang_shao
    lang_shao 2011-01-11 16:18

    [quote]是在每次创建session的时候保存到一个映射里面,id为用户的标示,然后收到退出消息的时候,找到该用户id对应的HttpSession,然后validate?我怎么觉得这是我们自己调用的销毁HttpSession副本,而不是Web服务器内存里的session销毁呢?[/quote]
    这种方法也可以吧, 怎么会是副本呢? 你记录下的只是 HttpSession 的引用,其实是指向同一个对象啊。

    点赞 评论

相关推荐