use*_*445 6 java jsp session-timeout
有没有办法在没有(用户交互)*的情况下检测会话超时,并将其重定向到某个页面; 即如果页面@特定持续时间没有活动; 服务器检测到它并在其他一些上自动重定向.
通过用户用户交互我的意思是; 有一种方法可以在用户点击某些内容时检测会话超时,然后一些请求转到服务器,然后服务器检查当前用户会话是否过期.
我需要的是我们不通知任何服务器(或者我们不执行任何操作),但是当会话到期时,服务器会自动检测到它并执行所需的操作.
谢谢,拉扎
小智 7
如果要求是在会话超时后重定向到登录页面(或任何其他页面),这就是我尝试实现它的方式:
将以下scriptlet包含在需要登录的所有页面中
<%
int timeout = session.getMaxInactiveInterval();
response.setHeader("Refresh", timeout + "; URL = login.jsp");
%>
Run Code Online (Sandbox Code Playgroud)
这样,任何需要登录的页面都会在会话超时后刷新/重定向到login.jsp(将其更改为所需的URL)
或(以避免遗漏任何页面)
你可以把它实际编写在一个单独的文件(timedoutRedirect.jsp),并把它作为使用"JSP属性组"头到所有页面需要登录(在web.xml)
<jsp-property-group>
<display-name>all jsp</display-name>
<url-pattern>/users/*</url-pattern>
<include-prelude>/timedoutRedirect.jsp</include-prelude>
</jsp-property-group>
Run Code Online (Sandbox Code Playgroud)
(您可能需要根据项目规范调整前奏网址)
当然,您可以通过实现文档范围的键盘和/或鼠标侦听器以及具有超时的周期性方法来在 JavaScript 中执行此操作。
var timeOut = 1000 * 60 * 30; // 30 minutes
var lastActivity = new Date().getTime();
var checkTimeout;
checkTimeOut = function(){
if(new Date().getTime() > lastActivity + timeOut){
// redirect to timeout page
}else{
window.setTimeout(checkTimeOut, 1000); // check once per second
}
}
Run Code Online (Sandbox Code Playgroud)
现在,您的全局侦听器只需将每个操作的lastActivity 设置为当前时间。
重新阅读问题时,您希望使用应用程序服务器的实际会话超时。这是一个困难的问题,因为当你向服务器发送 ajax 请求时,你实际上会防止会话过期(除非有硬性限制),所以我的答案可能仍然是最好的方法。
| 归档时间: |
|
| 查看次数: |
31536 次 |
| 最近记录: |