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

时间:2016-01-04 06:09:22

标签: php jquery ajax session

我只使用JQuery几周了。在这短短的时间里,我注意到,当一个SESSION到期时,我的登录页面会加载到已经加载的文档中。在我开始使用JQuery之前,这从来都不是问题。所以我想,因为我已经重写了我的所有JQuery文档以调用PHP,我的单独SESSION检查被引入JQuery PHP调用而不是重定向到登录页面。执行此操作时,快速页面刷新会将用户发送到登录页面。但它肯定看起来很俗气。

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

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

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

2 个答案:

答案 0 :(得分:2)

如果会话过期,则从请求的页面发送401-Unauthorized状态代码。然后在客户端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 Status Codes

答案 1 :(得分:1)

PHP Session,用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检查会话时间时,即使您可以改进此...