在jQuery中显示超时警告

时间:2013-02-28 22:44:38

标签: php jquery ajax session meta

我目前正在处理来自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>标记,以触发用户是否决定继续其会话。

这种方法有意义吗?我错过了什么吗?还有另一种方法会更有意义吗?


我当前的代码

<?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>

1 个答案:

答案 0 :(得分:2)

我最终做的是将sessioncheck.php代码留下并删除<meta>标记。然后我在关闭正文标记之前添加了以下内容:

<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 const,恰好是基于半小时的超时。