2013-02-28 85 views
0

我目前从PHP Web应用程序处理超时这样:显示超时警告中的jQuery

  • 每一页目前在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> 
+0

会话超时配置已经存在于PHP配置中。 – MatRt 2013-02-28 23:22:18

+0

@ user1073122 - 虽然看起来我可以在.htaccess文件中对其进行修改,但它看起来像是全局应用的(当我将为不同的用户组添加不同的超时时)。在任何情况下,我都希望在没有用户活动的情况下刷新页面(这意味着用户不一定会在任何地方点击,并且可能已经离开计算机) – 2013-02-28 23:57:29

+0

尝试添加javascript befoer元标记以编辑元标记 – Vineet1982 2013-03-01 02:51:04

回答

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常量,这恰好是基于一个半小时的超时为主。