我正在使用 JSP 和 JAVA 开发一个 Web 项目。我必须将会话超时设置为 infinity。只有当用户的浏览器关闭时,会话才会过期。我该怎么做?
我需要您的建议,将会话超时设置为无限是否是一种好习惯。请提供您的意见。
谢谢你。
我正在使用 JSP 和 JAVA 开发一个 Web 项目。我必须将会话超时设置为 infinity。只有当用户的浏览器关闭时,会话才会过期。我该怎么做?
我需要您的建议,将会话超时设置为无限是否是一种好习惯。请提供您的意见。
谢谢你。
您可以通过在 web.xml 中添加这些行来在 web.xml 文件中指定会话超时
<session-config>
<session-timeout>30</session-timeout>
</session-config>
该值以分钟为单位,它是一个非活动时间段,这意味着每当浏览器与服务器交互时都会刷新它。
具有无限值(不知道是否可能)强烈不推荐。您无法确定浏览器何时关闭,最后您可能会耗尽内存或存储大量无用的会话。
相反,您可以尝试在您的 html 或一些 ajax 请求中进行一些元刷新,以保持会话处于活动状态,尽管我不推荐这样做。只需在超时中设置一个高值即可。
希望能帮助到你。
Servlet 规范中没有指定默认会话超时,它留给容器。
对于 tomcat,它是 30 分钟。一个人总是可以通过 DD 覆盖这个值?
<session-config>
<session-timeout>600</session-timeout>
</session-config>
或者
setMaxInactiveInterval()
通过HttpSession 对象上的方法以编程方式。
如果会话超时设置为 -1,则会话生命周期将延长至无穷大,即只要容器正在运行。
最后,如果应用程序的会话超时是无限的,那么您的会话将永远不会过期,所以这不是一个好主意。
您可以尝试在您的 jsp 中使用下面的代码片段来点击一个 js 函数,该函数将调用一个 ajax 函数来点击服务器端组件。然后只需使用会话 API 使会话无效。
window.onbeforeunload = WindowClose;
function WindowClose() {
//Write a AJAx request here to hit the server side servlet of any filter
}
或使用
<body onunload="WindowClose(); >
在服务器端代码中,使用
HttpSession session = request.getsession();
session.setMaxInactiveInterval(0); //or session.invalidate();
同样如建议的那样,在 web.xml 中定义默认会话超时值将是一种很好的方法,以便在浏览器崩溃的情况下,会话将在规定的时间过去后失效。