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

Java—会话超时限制的可行性,java,spring,session,tomcat7,Java,Spring,Session,Tomcat7,使用编程方式设置无限会话超时是否可行 HttpSession。setMaxInactiveInterval(整数秒)或使用 <session-config> <session-timeout>-1</session-timeout> </session-config> -1 ??这会导致任何开销吗?文档中说,以负秒数调用该方法将导致会话永远不会超时 开销取决于实现,但我认为(从Catalina的StandardSession的源代码中

使用编程方式设置无限会话超时是否可行
HttpSession。setMaxInactiveInterval(整数秒)
或使用

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

-1

??这会导致任何开销吗?

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


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

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


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

答案就在这篇文章中:服务器将耗尽内存。可以使用
setMaxInactiveInterval
方法通过java servlet或jsp页面以编程方式设置会话超时

在这里,以秒为单位的int值指定servlet容器使该会话无效之前客户端请求之间的时间(以秒为单位)

间隔值为零或更小表示会话不应超时

然而,许多通常使用的HTTP服务器被配置为在一段时间不活动后丢弃持久连接,以节省系统资源,通常不通知客户机。因此,使连接保持活动状态可能会导致
java.lang.OutOfMemoryError:GC开销限制超出
错误


更多打开的连接需要更多内存,更多的请求击中服务器并最终导致服务器崩溃。

问题是这会导致任何开销吗?我不会无休止地保存会话,而是使用memory me cookie。好的,那么,在特定的不活动期后,是否可以将会话刷新到数据库?据说,数据库会话持久性是一种开销,只有分布式服务器才需要。