【问题标题】:What are some strategies to manage number of sessions and eliminate unneeded sessions in java?有哪些策略可以管理会话数量和消除 Java 中不需要的会话?
【发布时间】:2010-01-15 03:41:51
【问题描述】:

管理会话数量和消除不需要的会话有哪些策略?

或者

我如何知道不再需要会话?

【问题讨论】:

    标签: java servlets session


    【解决方案1】:

    servlet 容器通常会使超时的会话失效并擦除。你真的完全不需要担心它。但是,您可以在web.xml 中配置会话超时,如下所示:

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>
    

    值以分钟为单位,默认值为 30 分钟。这意味着当客户端长时间没有请求与会话关联的页面时,会话将失效。

    如果您想限制同时打开的会话数,则需要实现HttpSessionListener 并分别对sessionCreated()sessionDestroyed() 执行递增/递减。如果出于某些模糊的原因还想跟踪实际的 HttpSession 引用,请确保将它们存储在 WeakHashMap 中,以便在服务器内存中失效/取消引用时自动删除它们,否则会污染和溢出服务器内存。

    再一次,您不必担心维护会话。让 Web 容器完成它的任务,它就是为它设计的。

    【讨论】:

      【解决方案2】:

      你为什么要自己做这件事?您的 Web 服务器或容器应自动处理此问题,无需您的干预。

      【讨论】:

        【解决方案3】:

        在大多数 Java Web 应用程序服务器中,都有一个组件为您处理会话(但您可以在必要时配置该组件并与之交互)。在 Tomcat 中,它是Manager component

        【讨论】:

          【解决方案4】:

          如果你真的需要它,你可以鼓励你的用户使用注销功能,但一般大多数人会忽略它。

          如果您真的需要它,您可以使用 onUnload javascript 事件来捕获您的一些用户导航到另一个站点的事件。在这个问题Alternative for JavaScript onUnload 中可以找到有关 onUnload 的一些一般信息以及在哪些情况下它不起作用。用于排除指向您自己的域 http://www.dynamicdrive.com/forums/archive/index.php/t-4947.html 的链接的丑陋黑客。

          同样,除非您真的需要它,否则请坚持配置应用服务器的会话处理。

          【讨论】:

            【解决方案5】:

            我需要使用哪些策略来管理会话数量并消除不需要的会话?

            您不需要,应用程序服务器会为您执行此操作。更准确地说,容器将HttpSession 保存在内存中,直到关联的用户在一段时间内处于非活动状态,此时会话超时。那时,会话可以被垃圾收集。这意味着HttpSession 对象至少在默认配置超时值中指定的时间长度内保留在内存中,除非您以编程方式将它们删除。这通常是通过在调用HttpSession#invalidate() 方法时公开注销功能来完成的。但绝对不能保证用户会使用它。

            我如何知道不再需要会话?

            您如何知道用户在他的屏幕后面正在做什么?这就是容器为您处理的原因,您应该让他完成它的工作。只需遵循一些最佳实践,即可让您的应用程序在没有内存问题的情况下进行扩展:

            • 尽量减少HttpSession的使用(不要把整个地球都放在它上面)。
            • HttpSession 中删除不再使用的对象。
            • 将长期存在的数据放入数据库中。

            【讨论】:

              猜你喜欢
              • 2015-10-31
              • 2010-10-25
              • 2020-11-02
              • 2011-04-03
              • 2017-01-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多