Java-会话超时限制的可行性

时间:2014-10-21 08:41:36

标签: java spring session tomcat7

是否可以使用HttpSession. setMaxInactiveInterval(int seconds)或使用

以编程方式设置无限制的会话超时
<session-config>
    <session-timeout>-1</session-timeout>
</session-config>

?这会导致任何开销吗?

4 个答案:

答案 0 :(得分:2)

是。可以使用setMaxInactiveInterval方法通过java servlet或jsp页面以编程方式设置会话超时,

HttpSession.setMaxInactiveInterval(int seconds)

此处以秒为单位的int值指定servlet容器使此会话无效之前的客户端请求之间的时间(以秒为单位)。

间隔值为零或更小表示会话永远不会超时。

但是,许多通常使用的HTTP服务器配置为在一段时间不活动后丢弃持久连接,以节省系统资源,通常不通知客户端。因此,保持连接存活可能会导致java.lang.OutOfMemoryError: GC overhead limit exceeded错误。

Out Of Memory Error

更多开放式连接需要更多内存,更多请求会影响服务器,最终导致服务器崩溃。

答案 1 :(得分:0)

文档说,以负秒数调用该方法将导致会话永远不会超时。

开销取决于实现,但我认为(可以在Catalina的StandardSession的源代码中看到)它会比有限的会话时间产生更少的开销,因为服务器不需要进行清理在到期时间后需要。

答案 2 :(得分:0)

通过配置文件是首选,如果问题是是使用配置文件还是在代码中调用setMaxInactiveInterval(int seconds),则可以在一个地方更改超时限制。

是的,我们可以通过配置设置设置无限制的超时限制。

答案 3 :(得分:0)

答案在于这篇文章:http://www.theserverside.com/discussions/thread.tss?thread_id=26490服务器将内存不足