Java 如何从SessionID获取HttpSession对象?

Java 如何从SessionID获取HttpSession对象?,java,servlets,httpsession,Java,Servlets,Httpsession,我想根据某个事件使用户会话无效。我存储他们的sessionID,如何从这个ID获取他们的HttpSession? HttpSessionContext类已被弃用,没有替换项。已执行此操作的方法已被弃用。 但您可以使用HttpSessionListener实现您的想法,当创建新会话时,将其存储在HashMap中,会话id作为键,对象是实际的HttpSessionObject。您可以从中获得参考。Servlet 2.2出于安全原因特别不推荐使用此方法,因此不应该有任何正式的方法。不推荐使用,但如果使

我想根据某个事件使用户会话无效。我存储他们的sessionID,如何从这个ID获取他们的HttpSession?
HttpSessionContext类已被弃用,没有替换项。

已执行此操作的方法已被弃用。
但您可以使用HttpSessionListener实现您的想法,当创建新会话时,将其存储在HashMap中,会话id作为键,对象是实际的HttpSessionObject。您可以从中获得参考。

Servlet 2.2出于安全原因特别不推荐使用此方法,因此不应该有任何正式的方法。不推荐使用,但如果使用Tomcat,可以尝试使用Manager.findSession()


我刚刚从应用程序中删除了HttpSession。当许多服务器运行时,很难保持会话同步。我们试图通过编写自己的经理来调整它,但始终无法让它正常工作。最后,我们用大约500行代码编写了我们自己的会话实现,它工作得更好

是的,我能做到。但我正在为一个拥有数百万用户的大型网站编写应用程序。将这些id/会话存储在映射中是不明智的。我需要从容器本身获取会话,容器知道如何存储会话。存储对象意味着不存储实际对象。只存储了引用。所以存储空间会很小,我明白。但是如果容器将不太常用的会话序列化到DB/文件系统会怎么样??我不知道WebLogic如何处理这些会话。如果我找不到直接从容器中检索会话的直接方法,我将使用此解决方案作为最终解决方案。好的,如果您希望将会话对象保持为持久性,那么我建议在DB中保持相同的键(sessionID)、值(httpsession)。在这种情况下使用Berkeley DB是正确的选择。如果使用这种方法,您需要确保映射中的条目不会永远存在,否则GC可能会出现意外的内存泄漏/问题。可能使用WeakMap或WeakReference