2015-02-11 110 views
0

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

有人可以帮助我,以便立即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 
+0

如果你想显示登出的页面而不重新加载,你需要AJAX来做到这一点 – bluefog 2015-02-11 07:52:25

+0

http://stackoverflow.com/questions/520237/how-do-i-expire-a-php-session-after-30 - 分钟 – 2015-02-11 07:52:56

回答

4

我想实现的最佳途径是使用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(){ 
    setTimeout(function(){ 
     $.get("check.php", function(data){ 
     if(data==0) window.location.href="logout.php"; 
     }); 
    },1*60*1000); 
}); 

或者只是把它包在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); 
}); 
+0

我建议把JS包装在定时器/循环中,以满足OP的要求 – Mayhem 2015-02-11 07:58:49

+1

是的,编辑.. :) – void 2015-02-11 07:59:48

+0

这个答案总结了简单的作业,你稍后可能做的唯一事情就是开始使用JSON您可以使用json_encode() – Mayhem 2015-02-11 08:03:29

1

你不能做到这一点用PHP。你需要在javascript中计算时间并在此之后发出ajax请求。最简单的方法可能是使用像IdleTimeout这样的jQuery插件。

0

PHP代码需要调用/运行时执行......它不会在后台运行,除非有正在运行它..

您有几种选择:

1:阿贾克斯为通过Shikhar的建议..你必须有在javascript像一个的setTimeout这将这个每分钟怎么过经常呼叫

2:cron作业 ...但是,检查每一个活动会话文件中的cron作业和如果它已经过期,那么你只需删除它(杀死一个会话)

3:有一些其他的手段经常要检查

即使上面加载的PHP文件的,有这样做的没有肯定的方式..

Cron job/PHP loading ..他们需要一个触发器...和一个cron工作不会重定向你的用户,他们的会话第二次过期。

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

但即使如此,一旦用户已经登录,如果他们禁用JS ...你不会得到任何重定向或检查。

0

@JOB你需要触发一个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> 

每1秒之后,该脚本将检查注销的状态并注销用户,如果用户处于空闲状态的时间由PHP脚本决定。