【问题标题】:Correct way of keeping user session alive保持用户会话活动的正确方法
【发布时间】:2017-06-21 16:08:56
【问题描述】:

我正在考虑创建一个执行以下操作的脚本:

每隔 X 分钟,检查用户是否输入了某些内容。如果他们有,那么保持他们的服务器端会话活动(通过 AJAX 调用一些无害的操作服务器端)。如果他们没有,那么什么都不做。

这是我想出的,但我想知道是否有更好的方法:

// This variable will keep track of when the user has typed.
var b = false;

$(document).on('keyup', function () {
    console.log("Setting b to true.");
    b = true;
});

setInterval(func, 5000);

function func()
{
    if (b == true) {
        console.log("Keeping alive!");
        // Make AJAX call here.
    }
    b = false;
    console.log("  Setting b to false.");
}

我愿意接受建议。

【问题讨论】:

  • 为什么需要间隔?肯定只听按键事件就足够了吗?
  • 另外,避免使用setInterval,而是使用嵌套的setTimeouts。
  • 5秒间隔真的有必要吗?每 x 分钟一次“心跳”就足够了。并且可能将mousemove 添加到事件列表中。
  • 5 秒 仅用于示例。实际上可能是 5 分钟、7 分钟等。
  • @BenM 我放入间隔的原因是因为我不想每次用户按下一个键时都进行 AJAX 调用。另外,使用嵌套的setTimeout's 有什么原因吗?

标签: javascript session server


【解决方案1】:

几年前,Paul Irish 在 jQuery 中实现了一个空闲计时器。 (基于 YUI [1] 中 Nicholas C. Zakas 的内容)。你可以在 [2] 看到他的文章,并在 [3] 看到维护的 github 存储库

该方法类似于您的 sn-p,任何构成“活动”的事件侦听器,并且为了防止服务器被事件淹没,一些计时器何时 ping 服务器。您可以在他们的代码中看到他们遇到了哪些特殊异常以及他们监听了哪些事件。

使用 Paul Irish 的空闲计时器,Eric Hynds 编写并实现了一个 jQuery 插件,用于通知用户他们的会话何时到期。可惜那篇文章不见了。代码似乎维护在 [4]

[1]https://humanwhocodes.com/blog/2009/06/02/detecting-if-the-user-is-idle-with-javascript-and-yui-3/

[2]https://www.paulirish.com/2009/jquery-idletimer-plugin/

[3]https://github.com/thorst/jquery-idletimer

[4]https://github.com/ericlbarnes/jquery-idle-timeout

【讨论】:

    猜你喜欢
    • 2010-10-22
    • 2017-05-06
    • 1970-01-01
    • 2010-12-06
    • 2017-05-07
    • 2012-05-29
    • 2010-11-28
    • 2014-09-24
    相关资源
    最近更新 更多