Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript PHP自动注销,无需刷新页面_Javascript_Php_Jquery_Html_Ajax - Fatal编程技术网

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

Javascript PHP自动注销,无需刷新页面,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,我正在用PHP、JavaScript和HTML编写一个项目。当用户空闲1分钟时,我已成功完成自动注销。但问题是,我必须刷新页面才能执行它并注销 有人能帮我吗?这样,当1分钟结束,用户空闲时,代码将被执行,它将把我带到登录页面,而我不刷新它 这是我的密码: // check to see if $_SESSION['timeout'] is set if(isset($_SESSION['timeout']) ) { $session_life = time() - $_SESSION['time

我正在用PHP、JavaScript和HTML编写一个项目。当用户空闲1分钟时,我已成功完成自动注销。但问题是,我必须刷新页面才能执行它并注销

有人能帮我吗?这样,当1分钟结束,用户空闲时,代码将被执行,它将把我带到登录页面,而我不刷新它

这是我的密码:

// check to see if $_SESSION['timeout'] is set
if(isset($_SESSION['timeout']) ) {
$session_life = time() - $_SESSION['timeout'];
if($session_life > $inactive)
    {  


 echo"<script type='text/javascript'> 
window.alert('Your Session got Expired');
</script>";
header("Location: logout.php");
}
}

$_SESSION['timeout'] = time();
//Continuation of other codes
//检查是否设置了$\u会话['timeout']
如果(isset($\u会话['timeout'])){
$session_life=time()-$u session['timeout'];
如果($session\u life>$inactive)
{  
回声“
window.alert(“您的会话已过期”);
";
标题(“位置:logout.php”);
}
}
$\会话['timeout']=time();
//延续其他守则

使用php无法做到这一点。您需要在javascript中计算时间,然后发出ajax请求。最简单的方法可能是使用jQuery插件,比如IdleTimeout。

需要调用/运行PHP代码来执行。。。除非有什么东西在运行它,否则它不会在后台运行

您有几个选择:

1:Ajax如Shikhar所建议。。你必须在javascript中有一个类似setTimeout的东西,它会每分钟或每隔多久调用一次

2:cron作业。。。但是一个cron作业会检查每个活动会话文件,如果它已过期,则只需删除它(杀死会话)

3:有其他方法可以随时加载PHP文件

即使有上述情况,也没有确定的方法可以做到这一点

Cron作业/PHP加载。。他们需要一个触发器。。。而且cron作业不会在用户会话过期后立即重定向用户

在这里,您唯一的选择是在计时器上使用ajax发送到服务器,并检查会话是否仍然有效,如果无效,则在响应从PHP返回到ajax调用后重定向


但即便如此,一旦用户登录并禁用JS。。。您不会得到重定向或检查。

我想最好的实现方法是使用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

或者,如果希望在一分钟后检查一次,只需将其包装在
setInterval(function(){},1*60*1000)
中,而不是
setTimeout()

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

@您需要触发一个ajax请求,如下所示

    <script type="text/javascript">
         jQuery(document).ready(function(){
             setInterval(function(){
                 jQuery.ajax({
                     url: 'http://localhost/your_script.php',
                     type: 'POST',
                     success:function(response){
                         alert("You are logged out");
                         return false;
                     }
                 });
             }, 1000);
         });
    </script>

jQuery(文档).ready(函数(){
setInterval(函数(){
jQuery.ajax({
网址:'http://localhost/your_script.php',
键入:“POST”,
成功:功能(响应){
警报(“您已注销”);
返回false;
}
});
}, 1000);
});

此脚本将在每1秒后检查注销状态,如果用户在PHP脚本决定的时间内空闲,则注销该用户。

如果您希望在不重新加载的情况下显示注销页面,则需要AJAX来完成此操作。我建议将JS包装在计时器/循环中,以满足此OP的要求。此答案简单地总结了工作,您以后可以做的唯一一件事就是开始使用JSON,这样您就可以使用JSON_encode()来回发送和接收参数了。感谢alot@void,这是Osome,我整理好了,只是在check.php中的代码中,您没有使用“{}”括号表示if和else,但是av调试的结果如下:
    <script type="text/javascript">
         jQuery(document).ready(function(){
             setInterval(function(){
                 jQuery.ajax({
                     url: 'http://localhost/your_script.php',
                     type: 'POST',
                     success:function(response){
                         alert("You are logged out");
                         return false;
                     }
                 });
             }, 1000);
         });
    </script>