【问题标题】:Stop Prototype.js Ajax.PeriodicalUpdater on user logout在用户注销时停止 Prototype.js Ajax.PeriodicalUpdater
【发布时间】:2010-11-21 21:39:19
【问题描述】:

我有一个“在线用户”列表,我使用来自prototype.js 的Ajax.PeriodicalUpdater 每30 秒刷新一次。

存在一个问题,如果用户在网站上打开了两个选项卡/窗口,然后在其中一个中注销,则 PeriodicalUpdater 不会被取消。

这意味着 PeriodicalUpdater 使用整个登录页面更新我的块元素,因为我有一个 restful 身份验证,它重定向到那个。

我正在使用 PHP 会话,我真的无法理解这一点。

你们中的任何人能指出我正确的方向吗?

【问题讨论】:

    标签: php session prototypejs restful-authentication


    【解决方案1】:

    我会考虑更改返回结果的方法,以便它不需要经过身份验证的会话来访问它,但它仅在存在经过身份验证的会话时才返回有效信息。否则,它会返回一个指示更新应该停止的值和一条适合显示在您的在线用户块中的消息。这意味着您可能需要返回 JSON——这不是一件坏事——要么将它与 HTML sn-p 结合起来作为 JSON 的一部分,要么只是在客户端上从 JSON 数据构造 HTML(更好IMO,因为视图是进行标记的正确位置)。

    【讨论】:

    • 当然!伙计,你是明星。我的访问控制类中已经有一个排除文件的列表。我将 onlineList.php 添加到我的 $excludedPages 数组中,将整个页面包装在 if(isset($_SESSION['user_id'])) 中 - 一切都很好。非常感谢!
    【解决方案2】:

    创建 PE 时,保留对它的引用:

    // At global scope, or ideally if you have a namespaced object, use that
    var thePE;
    
    // Where you create the PE
    thePE = new PeriodicalExecuter(yourFunction, 3);
    

    当你想让它停止时,告诉它停止(假设它已经启动):

    if (thePE) {
        thePE.stop();
        thePE = undefined;
    }
    

    (PeriodicalExecuter#stop docs here.)

    【讨论】:

    • 感谢您的提示!我试图弄清楚,我真正希望它在何时何地停止。有什么方法可以检查我的 PHP 会话在 JavaScript 中是否仍然处于活动状态?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2010-10-04
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多