我使用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检查会话时间时,即使你也可以改进它。。。