12

如何在我的网站上使用 JavaScript 在/logout60 秒不活动后将用户重定向到页面?

我知道设置计时器或使用元刷新标签很简单:但我只想重定向非活动用户,而不是中断某人的活动会话/使用。

这可以用 JavaScript 实现吗?

4

4 回答 4

18

而不是使用具有不必要的千字节的插件,您只需要一个像这样的简单函数
(参见注释中的解释)

<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
于 2018-09-03T00:36:29.540 回答
5

我相信你正在寻找这样的东西:http:
//paulirish.com/2009/jquery-idletimer-plugin/

如果您要自己编写代码,则需要捕获鼠标和键盘事件并在任何这些事件之后重新启动计时器。如果计时器达到阈值或从阈值倒计时到 0,您可以重置页面的 URL。

于 2011-04-12T06:45:14.400 回答
4

还有一个更新版本的插件。

它将能够在整个文档或单个元素上触发空闲事件。例如,将鼠标悬停在某个元素上 x 秒,它会触发一个事件。当用户再次激活时会触发另一个事件。

此空闲事件将允许您在给定的不活动时间后重定向用户。

支持的活动: mousemove keydown wheel DOMMouseScroll mousewheel mousedown touchstart touchmove MSPointerDown MSPointerMove

https://github.com/thorst/jquery-idletimer

于 2015-01-08T07:18:16.287 回答
1

每当用户登录、点击某物或移动鼠标时设置一个计时器。您可以维护 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); 

之后,setInterval()每隔 10、20、30 或 60 秒(根据您的选择)继续调用以下函数,以检查该时间限制是否已过期。或者,您可以在用户尝试交互时调用该函数,以检查他的空闲时间是否超过了阈值。

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 来做同样的事情。

于 2020-04-22T06:53:12.090 回答