2017-08-16 25 views
0

我有这显示一个时间表,并且用户可以点击左,右网页的区域前进/后退一周:如何处理一个PHP会话超时

<script type="text/javascript"> 
var TimesheetOffset = 0; 
function TimesheetNav(AdjustBy) { 
    TimesheetOffset = TimesheetOffset + AdjustBy; 
    $("#timesheets").load("populate_timesheets.php?start=" + TimesheetOffset); 
} 
</script> 

populate_timesheets.php脚本显示在一个DIV面积“时间表”的ID时间表的信息,但前提是用户登录和他们的会话尚未过期 - 如果会话已过期,显示登录页面:

if (!isset($_SESSION['login_user'])) { 
     header("location: index.php"); 
    } 

问题是如果会话超时,index.php脚本出现在应该显示时间表的地方,而不是替换整个页面。我该如何修改PHP或JavaScript,以便如果会话超时,登录页面会替换整个页面?

+1

你可以将'$(“#timesheets”).load()'改为可以处理响应代码的东西。您也可以轮询服务器以保持会话活动或在超时情况下重定向。也可以更改会话中的gc以使其保持更长时间。很多事情到目前为止你尝试过什么? –

+0

您不能从后台请求重定向“前端”。您需要在前端执行此操作,即使用JavaScript重定向到登录页面。所以你的服务器端脚本只需要返回一个_value_到你的JavaScript,它可以基于这个决定。这可能意味着你不想首先使用.load,因为它没有这种内置的功能。所以一个“正常”的AJAX请求可能是更好的选择,它给了你更多的灵活性来对这两种不同的情况作出反应。 – CBroe

回答

1

JavaScript代码:

$.ajax("populate_timesheets.php?start=" + TimesheetOffset, { 
    type: "GET", 
    statusCode: { 
     401: function (response) { 
     // redirect to login page 
     } 
    }, 
    success: function (data) { 
     $("#timesheets").html(data); 
    }, 
    error: function (error) { 
     console.log('Error occured: ', error); 
    } 
}); 

PHP代码:

if (!isset($_SESSION['login_user'])) { 
    header("HTTP/1.1 401 Unauthorized"); 
    return; 
} 

我没有测试此代码,所以如果你有问题,请阅读jQuery文档关于Ajax请求:)

+0

我已经试过这段代码,但由于某种原因,它现在不填充'timesheets' DIV - 你能检查请愿书吗? –

+0

我忘了给$ .get中的回调函数添加一个参数。现在试试,我更新了我的答案。 –

+0

谢谢,它现在填充良好,但是当会话超时时,登录页仍然出现在'timesheets' DIV内,而不是整个页面 –