session.maxInactiveInterval和AJAX don';相处不好
我有一个使用PrimeFaces5.1的JSF网页,我想在会话过期后重定向到某个xhtml页面 我在web.xml中将会话超时设置为1分钟(用于测试,在测试之后将设置为30分钟)session.maxInactiveInterval和AJAX don';相处不好,ajax,jsf,redirect,session-timeout,Ajax,Jsf,Redirect,Session Timeout,我有一个使用PrimeFaces5.1的JSF网页,我想在会话过期后重定向到某个xhtml页面 我在web.xml中将会话超时设置为1分钟(用于测试,在测试之后将设置为30分钟) <session-config> <session-timeout>1</session-timeout> </session-config> 1. 我补充说 <meta http-equiv="refresh" content="#{session.
<session-config>
<session-timeout>1</session-timeout>
</session-config>
1.
我补充说
<meta http-equiv="refresh" content="#{session.maxInactiveInterval};url=#{request.contextPath}/season_expired.xhtml"/>
应用程序每个页面上使用的默认模板的
在大多数情况下(当我在页面之间移动等…)一切都很好,除了使用某种表单时,每次刷新都是由AJAX完成的。一分钟后我就被重定向了
有没有一种使用AJAX“刷新”会话的方法?您可以使用JS来完成在发出AJAX请求时可以清除的任务。您可以使用注册全局ajax事件侦听器函数
<script>
var redirectToExpired = function() { window.location='#{request.contextPath}/expired.xhtml' };
var expireTimeMillis = 5000;
window.redirectOnExpire = setTimeout(redirectToExpired, expireTimeMillis);
jsf.ajax.addOnEvent(function(data) {
if (data.status == 'begin') {
clearTimeout(window.redirectOnExpire);
window.redirectOnExpire = setTimeout(redirectToExpired, expireTimeMillis);
}
});
</script>
var redirectToExpired=function(){window.location='{request.contextPath}/expired.xhtml'};
var expireTimeMillis=5000;
window.redirectOnExpire=setTimeout(redirectToExpired,expireTimeMillis);
addOnEvent(函数(数据){
如果(data.status=='begin'){
clearTimeout(window.redirectOnExpire);
window.redirectOnExpire=setTimeout(redirectToExpired,expireTimeMillis);
}
});
与meta refresh标题一样,这有点幼稚,因为当您在多个浏览器选项卡中打开同一个webapp时,它不会很好地工作。在“遗忘”选项卡中,当您在另一个选项卡中的同一webapp上处于活动状态时,重定向仍将在后台发生
更好的方法是不要做所有这些,而是在实际用户操作期间依赖于viewexpiredeexception
。您可以在如何注册错误页面以及如何在那里使用元刷新头中找到
另见: