我们的应用程序在 30 分钟后注销并重定向到登录页面,我在 web.xml 中指定 session 超时并使用 requestProcessor 进行重定向。我想向用户显示一条消息,说明您的 session 在 session 后已过期到期了,我该怎么做。自动注销? 我想在页面提示错误信息“ session 超时,请重新登录”。那我怎么能检测到 session 超时呢?会自动触发任何方法吗?
最佳答案
创建一个 Activity 检查器,它每分钟检查一次是否发生了任何用户 Activity (鼠标单击、按键),并向服务器端执行心跳以在用户 Activity 时保持 session Activity ,而在用户不活动时不执行任何操作.当 30 分钟没有 Activity 时(或服务器端设置的任何默认 session 超时),然后执行重定向。
这是一个在 jQuery 帮助不大的启动示例绑定(bind)点击和按键事件并触发 ajax 请求。
<script src="http://code.jquery.com/jquery-latest.min.js"></script>
<script>
$(document).ready(function() {
$.active = false;
$('body').bind('click keypress', function() { $.active = true; });
checkActivity(1800000, 60000, 0); // timeout = 30 minutes, interval = 1 minute.
});
function checkActivity(timeout, interval, elapsed) {
if ($.active) {
elapsed = 0;
$.active = false;
$.get('heartbeat');
}
if (elapsed < timeout) {
elapsed += interval;
setTimeout(function() {
checkActivity(timeout, interval, elapsed);
}, interval);
} else {
window.location = 'http://example.com/expired'; // Redirect to "session expired" page.
}
}
</script>
创建一个 Servlet
来监听 /heartbeat
并且基本上只做以下事情:
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
request.getSession();
}
保持 session 活跃。
当您将登录用户存储在 session 中时,只要 session 过期,它就会“自动”注销。因此您无需手动注销用户。
关于java - session 过期后自动注销,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3201991/