管理会话数量和消除不需要的会话有哪些策略?
或者
如何知道不再需要会话?
答案 0 :(得分:1)
你为什么要自己这样做?您的Web服务器或容器应自动处理,无需您的干预。
答案 1 :(得分:1)
在大多数Java Web应用程序服务器中,有一个组件可以为您处理会话(但您可以根据需要配置该组件并与之交互)。在Tomcat中,它是Manager component。
答案 2 :(得分:1)
servlet容器通常会使超时的会话无效并擦除。你根本不需要担心它。但是,您可以在web.xml
中配置会话超时,如下所示:
<session-config>
<session-timeout>30</session-timeout>
</session-config>
该值以分钟为单位,默认值为30分钟。这意味着当客户端未长时间请求与会话关联的页面时,会话将失效。
如果要限制同时打开的会话数,则需要实现HttpSessionListener
并分别对sessionCreated()
和sessionDestroyed()
执行递增/递减。如果您想要跟踪实际的HttpSession
引用以及某些模糊的原因,请确保将它们存储在WeakHashMap
中,这样只要在服务器中无效/取消引用它们,它们就会被自动删除内存,否则会污染和溢出服务器内存。
再次,你不应该担心维持会话。让web容器完成它的任务,它就是为它设计的。
答案 3 :(得分:0)
如果你真的需要它,你可以鼓励你的用户使用注销功能,但一般来说大多数人会忽略它。
如果您确实需要它,可以使用onUnload javascript事件来捕获某些用户导航到另一个站点的事件。关于onUnload的一些一般信息以及它不起作用的场景可以在这个问题Alternative for JavaScript onUnload中找到。用于排除指向您自己的域http://www.dynamicdrive.com/forums/archive/index.php/t-4947.html的链接的丑陋黑客。
同样,除非您真的需要它,否则请坚持配置应用服务器的会话处理。
答案 4 :(得分:0)
我需要使用哪些策略来管理会话数量并消除不需要的会话?
您没有,应用程序服务器为您执行此操作。更确切地说,容器将HttpSession
保留在内存中,直到关联用户在一段时间内处于非活动状态,此时会话超时发生。那时,会话可以被垃圾收集。这意味着HttpSession
对象至少会在内存中保留默认配置超时值中指定的时间长度,除非您以编程方式删除它们。这通常通过在您调用HttpSession#invalidate()
方法的情况下公开注销功能来完成。但绝对不能保证用户会使用它。
如何知道不再需要会话?
您如何知道用户在屏幕后面做了什么?这就是为什么容器处理对你而且你应该让他完成它的工作。只需遵循一些最佳实践,即可在无内存问题的情况下扩展应用程序:
HttpSession
(不要将整个地球放在地上)。HttpSession
中的对象,请将其删除。