我正在用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
答案 0 :(得分:6)
我想最好的实现方法是使用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);
});
答案 1 :(得分:1)
你不能用php做到这一点。您需要在javascript中计算时间并在此之后发出ajax请求。最简单的方法可能是使用像IdleTimeout这样的jQuery插件。
答案 2 :(得分:0)
PHP代码需要被调用/运行才能执行......它不会在后台运行,除非运行它...
您有几个选择:
Shikhar建议的1: Ajax ..你必须在javascript中使用类似setTimeout的东西,每分钟调用一次或者经常调用
2: cron作业 ...但是一个cron作业会检查每个活动的会话文件,如果它已经过期,那么你只需将其删除(杀死一个会话)
3:还有其他方法加载PHP文件的频率与您想要检查一样
即使有了上述内容,也无法确定这样做..
Cron job / PHP loading ..他们需要一个触发器...而cron作业不会在他们的会话过期的第二个用户重定向。
你唯一的选择是在计时器上使用ajax发布到服务器并检查会话是否仍然有效,如果没有,则在响应从PHP返回到ajax调用后重定向。
但即使这样,一旦用户登录并且他们禁用了JS ......你就不会得到重定向或检查。
答案 3 :(得分: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脚本决定的时间内处于空闲状态,则会注销用户。