首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在jQuery中显示超时警告

在jQuery中显示超时警告
EN

Stack Overflow用户
提问于 2013-02-28 22:44:37
回答 1查看 3.2K关注 0票数 1

我目前处理PHP web应用程序的超时问题,如下所示:

  • 每个页面当前在PHP中都有一个超时签入,它根据用户加载的最后一个页面检查当前时间。如果两者之间的差异超过15分钟,则销毁用户的会话,创建新会话,将当前页面位置放置到会话上,并将用户重定向到登录页面。
  • 每个页面头都有一个<meta>标记,在15分5秒后刷新页面(因此“调用”超时检查)。

我目前正在考虑为用户添加更大的控件,例如,如果用户碰巧在页面上工作了很长一段时间,并且考虑允许弹出在超时前大约两分钟出现。弹出窗口可以选择继续会话(进行AJAX调用以刷新会话中的最后一个活动)或注销。如果忽略弹出窗口(例如,如果用户位于另一个页面上),则该用户将被注销。

根据Using Javascript to override or disable meta refresh tag,我将无法重置<meta>标记,这可能意味着我必须删除该标记。PHP/Javascript Session Timeout with warning的唯一答案是使用重定向到登录页面的JavaScript调用,但是可以通过禁用JavaScript来避免这种情况。

我想做的是围绕<meta>重定向标记使用<noscript> (因为我使用的是HTML5),这样即使用户不使用JavaScript,它们仍然会被超时。这还将从触发用户是否决定继续其会话时删除<meta>标记。

这种做法有意义吗?我是不是遗漏了什么?还有其他更有意义的方法吗?

我现在的代码

代码语言:javascript
运行
复制
<?php
require_once("include/session.php");
require_once("include/sessioncheck.php");
?>
<html>
    <head>
         <meta http-equiv="refresh" content="<?= TIMEOUT_MIN * 60 ?>" />
         <!-- additional tags -->
    </head>
    <body>
        <!-- content -->
    </body>
</html>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-08 17:36:01

我最后所做的就是把我的sessioncheck.php代码留在里面,并移除<meta>标记。然后,我在结束正文标记之前添加了以下内容:

代码语言:javascript
运行
复制
<div id="timeout-warning"></div>
<div id="timeout-warning-text">Your session is set to expire in less than one minute
    due to inactivity. Click <a href="javascript:void(0)" id="timeout-restart">
    here</a> to keep your session alive.</div>

<script type="text/javascript">
    var timeoutWarning;
    var timeout;
    $(document).ready(function() {
        $("#timeout-restart").click(function() {
            clearTimeout(timeout);
            timeout = setTimeout(function() {
                document.location.reload(false);
            }, 1801000);
            timeoutWarning = setTimeout(function() {
                $("#timeout-warning").fadeTo(2000, 0.5);
                $("#timeout-warning-text").fadeIn(2000);
            }, 1740000);
            $("#timeout-warning").hide();
            $("#timeout-warning-text").hide();
            return false;
        });

        timeoutWarning = setTimeout(function() {
            $("#timeout-warning").fadeTo(2000, 0.5);
            $("#timeout-warning-text").fadeIn(2000);
            clearTimeout(softTimeout);
        }, 1740000);
        timeout = setTimeout(function() {
            document.location.reload(false);
        }, 1801000);
    });
    </script>

1740000和1801000的数字来自PHP,而PHP恰好基于半个小时的超时。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15147118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档