如何在我的网站上使用JavaScript在60秒不活动后将用户重定向到/logout
页面?
我知道设置计时器或使用元刷新标签很简单:但我只想重定向非活动用户,而不是破坏某人的活动会话/使用。
这可以用JavaScript吗?
答案 0 :(得分:6)
我相信你正在寻找这样的事情:
http://paulirish.com/2009/jquery-idletimer-plugin/
如果您自己编写代码,则需要捕获鼠标和键盘事件,并在发生任何这些事件后重新启动计时器。如果计时器达到阈值或从阈值向下计数到0,则可以重置页面的URL。
答案 1 :(得分:4)
还有一个更新的插件版本。
它将能够在整个文档或单个元素上触发空闲事件。例如,将鼠标悬停在某个元素上x秒,然后触发一个事件。当用户再次激活时会触发另一个事件。
此空闲事件将允许您在给定的不活动时间后重定向用户。
支持的活动:mousemove keydown wheel DOMMouseScroll mousewheel mousedown touchstart touchmove MSPointerDown MSPointerMove
答案 2 :(得分:3)
您不需要使用具有不必要的千字节大小的插件,而是需要像这样的简单函数
(请参见注释中的说明):
<script>
(function() {
const idleDurationSecs = 60; // X number of seconds
const redirectUrl = '/logout'; // Redirect idle users to this URL
let idleTimeout; // variable to hold the timeout, do not modify
const resetIdleTimeout = function() {
// Clears the existing timeout
if(idleTimeout) clearTimeout(idleTimeout);
// Set a new idle timeout to load the redirectUrl after idleDurationSecs
idleTimeout = setTimeout(() => location.href = redirectUrl, idleDurationSecs * 1000);
};
// Init on page load
resetIdleTimeout();
// Reset the idle timeout on any of the events listed below
['click', 'touchstart', 'mousemove'].forEach(evt =>
document.addEventListener(evt, resetIdleTimeout, false)
);
})();
</script>
如果要重定向到主页(通常位于/
),请将'/logout'
更改为'/'
:
const redirectUrl = '/'; // Redirect idle users to the root directory
如果您想重新加载/刷新当前页面,只需将上面代码中的'/logout'
更改为location.href
:
const redirectUrl = location.href; // Redirect idle users to the same page
答案 3 :(得分:0)
在用户登录,单击某些内容或移动鼠标时设置计时器。您可以维护localStorage,sessionStorage或任何全局变量来跟踪空闲时间。
let obj_date = new Date();
let miliseconds = obj_date.getTime(); // Returns the number of miliseconds since 1970/01/01
localStorage.setItem("idle_time",miliseconds);
此后,每隔10、20、30或60秒(根据您的选择)从setInterval()
之类的内部继续调用以下函数,以检查该时间限制是否已到期。或者,只要用户尝试进行交互以检查其空闲时间是否已超过阈值,就可以调用该函数。
function check_if_session_expired() {
let max_idle_minutes=1;
let miliseconds_now = obj_date.getTime();
let get_idle_time_in_miliseconds = localStorage.getItem("idle_time");
let one_minute_to_milisecond = 1000 * 60;
if ((Math.round(miliseconds_now / one_minute_to_milisecond) - Math.round(get_idle_time_in_miliseconds / one_minute_to_milisecond)) >= max_idle_minutes) {
console.log("expired");
//clear sessionStorage/localStorage if you want
localStorage.removeItem("idle_time");
//end the session and redirect the user to logout page
window.location.replace('example.com/logout');
} else {
localStorage.setItem("idle_time",miliseconds_now);
}
}
您也可以使用cookie。