我目前正在处理会话超时。 在我的页面在特定时间不活动期间, 会话应该超时并返回登录页面。
我有这段代码。
// set timeout period in seconds
$inactive = 30;
// check to see if $_SESSION['timeout'] is set
$logger->debug("root|DEBUG3 accdetails_proc");
if(isset($_SESSION['timeout']) ) {
$session_life = time() - $_SESSION['timeout'];
if($session_life > $inactive)
{
session_destroy();
header("Location: ../../index.php");
///OR
//echo('<script type="text/javascript">');
//echo('top.location.href = "../../index.php"');
//echo('</script>');
}
else{ }
标头和回声都不起作用。当它超时时, 它在session_destroy()中停止并仍然执行回调, 因为我使用ajax调用此文件。
如果我使用“echo”,响应是:
<script type="text/javascript">top.location.href = "../../index.php"</script>');
在我的回调中解析时已经发出错误。
如果我使用“标题”,则返回我的登录页面的html 但首先执行我的回调,所以它仍然发出错误 并且未加载登录页面。
有人可以帮忙解决如何在执行ajax回调时的问题 你摧毁了一个会话?
由于
答案 0 :(得分:1)
如果您使用Ajax回调来检查会话是否超时,则需要处理重定向到Ajax数据处理程序中的起始页面。
您的PHP可能如下所示:
if(isset($_SESSION['timeout']) ) {
$session_life = time() - $_SESSION['timeout'];
if($session_life > $inactive)
{
session_destroy();
echo "LOGOUT";
}
}
echo "OK";
您页面上的JavaScript代码可能如下所示(假设您使用jQuery):
$.get('http://example.com/my_session_check.php', function(data){
if(data=='LOGOUT') {
top.location.href="../../index.php";
}
});
答案 1 :(得分:0)
您需要在头文件中使用的ajax中添加相同的逻辑。向回叫功能发送超时响应,在回叫中,您可以显示警报,然后根据您的要求重定向浏览器。