如何使会话不超时?

时间:2015-05-05 07:40:01

标签: java session servlets web session-timeout

我需要在我的网络应用程序中的会话不要超时。它们应该在那里,直到用户手动注销。这可能是一个糟糕的电话,但我必须实施它。

我在web.xml中尝试了以下内容

<session-config>
        <session-timeout>
            -1
        </session-timeout>
    </session-config>

然而,会议仍然有时间!有什么建议吗?

5 个答案:

答案 0 :(得分:1)

您也可以这样做:

<session-config>
    <session-timeout>0</session-timeout>
</session-config>

您可以看到here

的工作原理

答案 1 :(得分:1)

我想建议反对设置无限会话超时。这是一个非常糟糕的调用,因为这是实现内存泄漏的一种特定方式。因此,您将拥有一套不断增长的“活跃”会话。它们中的每一个都有可能在会话属性中存储大量数据。他们每个人都可以拥有与会话相关的其他数据(注入,资源,bean)。

您的应用程序将继续降级,直到您被迫重新启动。

此外,我想说明会话活动时间越长,就越容易受到黑客攻击和拦截。

你说,

  

这可能是一个糟糕的电话,但我必须实施它。

是的,确实是一个非常糟糕的电话,但我很高兴你知道。我想有机会为您提供替代解决方案。您能否提供原因,也许还有一些代码可以帮助记录您的案例?

实际上考虑一些现实生活场景,我遇到的情况是我们不希望使用他在会话中收集的设置和信息使用户页面失效。这是一个复杂的图形解决方案,需要大量的输入。用户只需点击刷新即可检索最新数据。

上述方案的解决方案是不存储它是会话的一部分,而是在页面本身编码。最简单的方法是使用<intput type="hidden">字段。您也可以使用嵌入式xml,或将其作为URL的一部分(以使真正的浏览器刷新工作)。

答案 2 :(得分:0)

使用HttpSessionListener。在sessionCreated()方法中,您可以以编程方式设置会话超时。

public class MyHttpSessionListener implements HttpSessionListener{
  public void sessionCreated(HttpSessionEvent event){
    event.getSession().setMaxInactiveInterval(-1); //in seconds
  }
  public void sessionDestroyed(HttpSessionEvent event){}
}
And don't forget to define the listener in the deployment descriptor:

<webapp>
...
  <listeners>
    <listener-class>com.MyHttpSessionListener</listener-class>
  </listeners>
</webapp>

答案 3 :(得分:0)

在web.xml中定义以下内容

<session-config>
    <session-timeout>-1</session-timeout>
</session-config>

与上面发布的代码具有相同的效果,并将应用于该网络应用的所有会话。

答案 4 :(得分:0)

您还可以使用以下内容:

HttpSession session = request.getSession();
session.setMaxInactiveInterval(0);

HttpSession session = request.getSession();
session.setMaxInactiveInterval(-1);

enter image description here