【发布时间】:2011-04-21 14:49:34
【问题描述】:
我正在我的 Web 应用程序中维护 sessionid(s) 和 HttpSession 对象的映射。我使用 HttpSessionListener 从地图中填充或删除会话。当我的网络服务器崩溃并关闭并重新启动时,我需要一种方法来检查提交的 sessionid 是否有效。显然,当应用重新上线时,地图是空的,因此所有会话 ID 都是无效的,但我只想通过某种方式检查传入的会话 ID,如果可能的话。
谢谢
【问题讨论】:
我正在我的 Web 应用程序中维护 sessionid(s) 和 HttpSession 对象的映射。我使用 HttpSessionListener 从地图中填充或删除会话。当我的网络服务器崩溃并关闭并重新启动时,我需要一种方法来检查提交的 sessionid 是否有效。显然,当应用重新上线时,地图是空的,因此所有会话 ID 都是无效的,但我只想通过某种方式检查传入的会话 ID,如果可能的话。
谢谢
【问题讨论】:
一个建议是将您的 Map 序列化到磁盘并在 Web 服务器启动时重新加载。将地图备份到磁盘的策略取决于您的要求,您可以在每次添加/更新地图时或定期写入磁盘。将会话数据写入磁盘相当容易,这通常用于实现冗余和负载平衡场景。
【讨论】:
您可以将它们保存在数据库中的某个表中。这样它就不会受到崩溃的影响。顺便说一句,如果您也需要,服务器会将会话序列化到磁盘。
【讨论】:
您到底为什么要自己维护会话? servlet 容器应该为您执行此操作。我还没有看到你的代码,也许你有充分的理由去做你正在做的事情,但我觉得你只是不了解 servlet API,并且正在尝试自己重新实现它。
另外,您可能对此感兴趣:Tomcat 具有保持会话的特性,这意味着会话状态在服务器重新启动后仍然存在。 (更新应用程序时关闭它,因为不同版本的类之间可能存在不匹配。)
【讨论】: