使用grails和spring安全性,我想在会话超时后自动显示登录页面。
现在,当会话超时时,它仍然保留在我离开它的页面上。点击任何链接后,我会回到登录页面。我希望用户能够自动重定向到登录页面。
实现这一目标的最佳方式是什么。
答案 0 :(得分:1)
这取决于您的应用程序以及用户与页面的交互方式。
例如,如果您的页面是静态页面并且没有执行任何AJAX或Websockets,那么完全可能只需设置setTimeout()
(documentation)函数来重定向X后的数字分钟(其中X是你的会话超时)。计时器将在页面加载时启动。您甚至可以在布局中包含它。
// assumes you are using the default login controller and action
window.setTimeout(function() {
// this should poll the server and check to see if the session is valid
// if not then it should issue the redirect (below)
window.location.href='${createLink(controller: "login", action: "login")}'
}, (20*60*1000)); // 20 minutes
但是,如果您的应用程序使用AJAX或Websockets变得更加复杂,因为用户可以停留在单个页面上并与之交互,并且每次交互时,会话(服务器端)上的超时都将被重置。这将要求您在每次执行操作时管理在客户端(它们所在的页面)上重置计时器。在$.ajaxStart
中执行此操作可能有效(documentation)。
var sessionTimeout = ... // leaving this implementation out as it's described above.
$(document).ajaxStart(function() {
// in your click function, call clearTimeout
window.clearTimeout(sessionTimeout);
// then call setTimeout again to reset the timer
sessionTimeout = window.setTimeout(...);
});
Websockets是一个完全不同的野兽,但只要数据到达时,就会应用与上述相同的概念。
在不了解有关您的应用程序的更多细节的情况下,很难说哪个是正确的选择,但这些选择基本上是您的选择,这些示例应该让您走上正确的道路。