PHP自动注销,无需刷新页面。

9 浏览
0 Comments

PHP自动注销,无需刷新页面。

我正在使用PHP、JavaScript和HTML编写一个项目。我已经成功地实现了当用户闲置1分钟时自动注销的功能。但问题在于,我必须刷新页面才能执行并注销我。

有人可以帮我吗?当用户闲置超过1分钟后,立即执行代码并将我带到登录页面,而无需刷新页面?

这是我的代码:

// 检查是否设置了$_SESSION['timeout']
if(isset($_SESSION['timeout'])) {
    $session_life = time() - $_SESSION['timeout'];
    if($session_life > $inactive) {  
        echo"";
        header("Location: logout.php");
    }
}
$_SESSION['timeout'] = time();
// 其他代码的继续执行

0
0 Comments

问题出现的原因是PHP代码需要被调用或运行才能执行,否则它不会在后台运行。解决方法有以下几种:

1. 使用Ajax:在JavaScript中使用setTimeout函数,每隔一分钟或其他一定时间调用一次PHP文件。

setTimeout(function(){
  // 调用Ajax函数
}, 60000); // 一分钟

2. 使用cron job(计划任务):创建一个cron job来定期检查活动会话文件,如果会话已过期,则删除该文件,即终止会话。

3. 使用其他方式加载PHP文件来进行定期检查。

即使使用上述方法,也不能保证完全解决问题。cron job和PHP加载都需要触发器,而cron job不会在会话过期后立即重定向用户。

因此,唯一的选择是使用定时器的Ajax,向服务器发送POST请求并检查会话是否仍然有效。一旦从PHP返回响应到Ajax调用,就可以进行重定向。但是,如果用户登录后禁用了JavaScript,将无法进行重定向或检查。

0
0 Comments

PHP自动注销而不需要刷新页面的原因是因为PHP本身无法实现这个功能。解决方法是使用JavaScript来计算时间,并在一定时间后发送ajax请求。其中最简单的方法可能是使用像IdleTimeout这样的jQuery插件。

0
0 Comments

PHP自动登出无需刷新页面的原因是会话超时。解决方法是使用JS和PHP的组合,通过定时发送请求来检查会话是否超时。具体实现如下:

check.php

if(isset($_SESSION['timeout']) ) {
    $session_life = time() - $_SESSION['timeout'];
    if($session_life > $inactive) echo "0";
    else echo "1";
}
$_SESSION['timeout'] = time();

.js

$(document).ready(function(){
    setInterval(function(){
        $.get("check.php", function(data){
            if(data==0) window.location.href="logout.php";
        });
    },1*60*1000);
});

如果希望每隔一分钟都检查一次超时情况,可以将代码包裹在`setInterval(function(){},1*60*1000)`中。

此外,建议将JS代码包裹在一个定时器/循环中,以满足特定要求。还可以使用JSON来发送和接收参数,可以使用`json_encode()`函数实现。

在check.php中的代码中,可能会遗漏if和else的大括号。以下是经过调试后的修正代码:

 $inactive) {
        echo "0";
    } else {
        echo "1";
    }
}
$_SESSION['timeout'] = time();
?>

这样,就实现了PHP自动登出无需刷新页面的功能。

0