如何检查sessionId在servlet中是否有效(java)

我在我的网络应用程序中维护了一个sessionid(s)和HttpSession对象的映射。 我使用HttpSessionListener来填充或从地图中删除会话。 当我的Web服务器崩溃并关闭并重新启动时,我需要一种方法来检查提交的sessionid是否有效。 显然,当应用程序重新联机时,Map是空的,因此所有会话ID都无效,但我只是想要一些方法来检查传入的sessionid,如果可能的话……

谢谢

您可以将这些保存在某个表中的DB中。 这样它就不会受到撞击的影响。 顺便说一句,服务器将会话序列化到磁盘,如果你也想要它们。

一个建议是将Map序列化为磁盘并在Web服务器启动时重新加载。 将Map备份到磁盘的策略取决于您的要求,您可以在每次添加/更新映射时或定期写入磁盘。 将会话数据写入磁盘相当容易,这通常用于实现冗余和负载平衡方案。

为什么你自己维持会议? servlet容器应该为你做。 我没有看到你的代码,也许你有充分的理由做你正在做的事情,但我觉得你只是不理解servlet API,并试图自己重新实现它。

此外,您可能对此感兴趣:Tomcat具有持久保存会话的function,这意味着会话状态在服务器重新启动后仍然存在。 (在更新应用程序时关闭它,因为不同版本的类之间可能存在不匹配。)