session.maxInactiveInterval 和 AJAX 上的元刷新不合得来
Meta refresh on session.maxInactiveInterval and AJAX don't get along
我有一个使用 PrimeFaces 5.1 的 JSF 网页,我想在会话过期后重定向到某个 xhtml 页面。
我在 web.xml
中将会话超时设置为 1 分钟(之后将设置为 30 分钟进行测试)
<session-config>
<session-timeout>1</session-timeout>
</session-config>
并且我添加了
<meta http-equiv="refresh" content="#{session.maxInactiveInterval};url=#{request.contextPath}/season_expired.xhtml"/>
到 <h:head>
应用程序每个页面上使用的默认模板。
大部分时间一切正常(当我在页面之间移动等时),除非我使用某种形式,其中每次刷新都由 AJAX 进行。然后我在一分钟后被重定向。
有没有办法 "refresh" 与 AJAX 进行会话?
您可以使用 JS setTimeout()
for that which you can clear out with clearTimeout()
when an ajax request is made. You can use jsf.ajax.addOnEvent()
注册全局 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>
与元刷新 header 一样,这有点天真,因为当您在多个浏览器选项卡中打开相同的 Web 应用程序时,它不能很好地工作。在“被遗忘”的选项卡中,当您在另一个选项卡中使用同一网络应用程序时,重定向仍会在后台发生。
更好的做法是不要全部都这样做,而是在真正的用户操作过程中依赖 ViewExpiredException
。您可以在 javax.faces.application.ViewExpiredException: View could not be restored 中找到如何为此注册错误页面以及如何在那里使用元刷新 header。
另请参阅:
我有一个使用 PrimeFaces 5.1 的 JSF 网页,我想在会话过期后重定向到某个 xhtml 页面。
我在 web.xml
中将会话超时设置为 1 分钟(之后将设置为 30 分钟进行测试)<session-config>
<session-timeout>1</session-timeout>
</session-config>
并且我添加了
<meta http-equiv="refresh" content="#{session.maxInactiveInterval};url=#{request.contextPath}/season_expired.xhtml"/>
到 <h:head>
应用程序每个页面上使用的默认模板。
大部分时间一切正常(当我在页面之间移动等时),除非我使用某种形式,其中每次刷新都由 AJAX 进行。然后我在一分钟后被重定向。
有没有办法 "refresh" 与 AJAX 进行会话?
您可以使用 JS setTimeout()
for that which you can clear out with clearTimeout()
when an ajax request is made. You can use jsf.ajax.addOnEvent()
注册全局 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>
与元刷新 header 一样,这有点天真,因为当您在多个浏览器选项卡中打开相同的 Web 应用程序时,它不能很好地工作。在“被遗忘”的选项卡中,当您在另一个选项卡中使用同一网络应用程序时,重定向仍会在后台发生。
更好的做法是不要全部都这样做,而是在真正的用户操作过程中依赖 ViewExpiredException
。您可以在 javax.faces.application.ViewExpiredException: View could not be restored 中找到如何为此注册错误页面以及如何在那里使用元刷新 header。