是否可以使用HttpSession. setMaxInactiveInterval(int seconds)
或使用
<session-config>
<session-timeout>-1</session-timeout>
</session-config>
?这会导致任何开销吗?
答案 0 :(得分:2)
是。可以使用setMaxInactiveInterval
方法通过java servlet或jsp页面以编程方式设置会话超时,
HttpSession.setMaxInactiveInterval(int seconds)
此处以秒为单位的int值指定servlet容器使此会话无效之前的客户端请求之间的时间(以秒为单位)。
间隔值为零或更小表示会话永远不会超时。
但是,许多通常使用的HTTP服务器配置为在一段时间不活动后丢弃持久连接,以节省系统资源,通常不通知客户端。因此,保持连接存活可能会导致java.lang.OutOfMemoryError: GC overhead limit exceeded
错误。
更多开放式连接需要更多内存,更多请求会影响服务器,最终导致服务器崩溃。
答案 1 :(得分:0)
文档说,以负秒数调用该方法将导致会话永远不会超时。
开销取决于实现,但我认为(可以在Catalina的StandardSession的源代码中看到)它会比有限的会话时间产生更少的开销,因为服务器不需要进行清理在到期时间后需要。
答案 2 :(得分:0)
通过配置文件是首选,如果问题是是使用配置文件还是在代码中调用setMaxInactiveInterval(int seconds),则可以在一个地方更改超时限制。
是的,我们可以通过配置设置设置无限制的超时限制。
答案 3 :(得分:0)
答案在于这篇文章:http://www.theserverside.com/discussions/thread.tss?thread_id=26490服务器将内存不足。