在使用JQuery时,是否有更好的方法来检查过期的SESSIONS


Is there a better way to check for expired SESSIONS when using JQuery?

我使用JQuery才几周。在这短短的时间里,我注意到,当SESSION到期时,我的登录页面会加载到已经加载的文档中。在我开始使用JQuery之前,这从来都不是一个问题。因此,我认为,由于我已经为JQuery重写了所有文档以调用PHP,因此我唯一的SESSION检查被拉入JQuery PHP调用,而不是重定向到登录页面。当它这样做时,快速刷新页面会将用户发送到登录页面。但它看起来确实很俗气。

所以,我的想法(我希望我错了)是把

if ($_SESSION["memberid"] == "") {
header("Location: wslogin.php");
exit();
}

在JQuery调用的每个PHP块中。也许这将是现在所需要的,因为我正在使用JQuery。在JQuery之前,我所有的工作都在<form>标记中,并且每个操作都会重新加载页面。结束的SESSION总是发送到登录页面。我不是世界上最好的解释者,但我希望有人能理解这一点并找到解决方案。谢谢

如果会话过期,则从请求的页面发送401未授权状态代码。然后在客户端AJAX调用中捕获状态代码。

JavaScript

$.ajax({
  data: {},
  dataType: 'json',
  success: function(data) {
    // do whatever here
  },
  type: 'post',
  url: 'load_data.php',
  error: function(XMLHttpRequest, textStatus, errorThrown) {
    // XMLHttpRequest.responseText has your json string
    // XMLHttpRequest.status has the 401 status code
    if (XMLHttpRequest.status === 401) {
      location.href = 'login.php';
    }
  }
});

PHP

header('HTTP/1.1 401 Unauthorized', true, 401);

参考

HTTP状态代码

PHP会话,用PHP控制您的会话

<?php
if (isset($_SESSION['LAST_ACTIVITY']) && (time() - $_SESSION['LAST_ACTIVITY'] > 120)) {
    session_unset();     // unset $_SESSION variable for the run-time
    session_destroy();   // destroy session data in storage
    header('location:logout.php');
}
$_SESSION['LAST_ACTIVITY'] = time(); // update last activity time stamp
if (empty($_SESSION['username'])) {
    header('location:logout.php');
}
?>

简单地说,你可以把它放在模板页面的标题上,这样每次php检查会话时间时,即使你也可以改进它。。。