如何在x分钟后强制注销php会话(非非活动注销)

如何在x分钟后强制注销php会话(非非活动注销),php,session,logout,Php,Session,Logout,以下代码仅在手动页面刷新时使页面过期。我希望页面自动终止会话,注销用户并重定向到登录页面 <?php session_start(); if( !isset( $_SESSION['user_id'] ) || (time() - $_SESSION['login_time']) > 60) /*session expires after 1 minute*/ { //logout code such as session unset, destroy; hea

以下代码仅在手动页面刷新时使页面过期。我希望页面自动终止会话,注销用户并重定向到登录页面

<?php

session_start();

if( !isset( $_SESSION['user_id'] ) || (time() - $_SESSION['login_time']) > 60) /*session expires after 1 minute*/
{
    //logout code such as session unset, destroy;

    header("Location:login.php");

}
else
{
    //page  contents if any

}
?>


gc_maxlifetime有它自己的问题。所以我不想实施它。找到了另一个使用ajax和php的,但希望确保还有其他可能的方法。请确认执行此操作的方法。

您可以确定会话缓存过期的会话时间(分钟)


通常,PHP只响应HTTP请求执行,因此在请求到达之前不会清理会话。何时以及如何完成此操作是使用参数配置的


虽然不能直接运行会话管理代码,但可以通过配置参数,然后通过
cron
或类似工具模拟请求来运行会话管理代码。使用未发布的URL请求每分钟Ping一次服务器,该请求将
session.gc\u probability
设置为100,然后启动会话。这将导致会话管理代码对会话进行垃圾收集,这将有效地清理任何超时会话。

您可以使用jQuery.ajax或其他您喜欢的ajax执行此操作:

<?php
$sessiontime = 60; // 1 minute
$time = $_SESSION['login_time']-time()+$sessiontime;
?>
<script>
setTimeout(function() {
   $.ajax({
      url: '/path/to/logout-file.php',
      dataType: 'json',
      complete: function(){
         window.location.href = 'login.php';
      }
   });

}, (<?=$time?>*1000));
</script>

setTimeout(函数(){
$.ajax({
url:“/path/to/logout file.php”,
数据类型:“json”,
完成:函数(){
window.location.href='login.php';
}
});
}, (*1000));
您可以使用元刷新 30分钟


META HTTP-EQUIV=“refresh”content=“1800;URL=../logout.php”

您可以将会话设置为在x分钟后过期。。。每次加载页面时。这样,如果他们在x分钟内处于非活动状态,会话将过期。正如我的标题所说,我不希望非活动状态过期或在页面加载时过期。我想在x分钟内自动过期。好的,我会解释清楚我的要求。我想给任何用户5分钟的时间。从用户登录时间起5分钟后,无论用户处于活动状态还是非活动状态,都应自动注销并重定向到登录页面。会话缓存是否过期是为了让浏览器将缓存存储10分钟?我希望服务器能够在x分钟内自动注销用户会话,而无需页面加载(而不是不活动注销)。PHP需要一个命令来运行脚本。也就是说,需要加载页面。您想在注销时运行任何数据库查询吗?我知道需要触发PHP。我的问题是,是否有任何方法可以结合其他技术,如ajax或其他任何技术。不,我不想在注销时运行任何数据库查询。我已经发布了另一个答案,请检查是否是您想要的。谢谢您提供的信息。这是为了清理过期会话(超时会话)?我的要求是在指定的分钟后,在没有任何HTTP请求的情况下从活动会话注销用户。我知道PHP只在响应HTTP请求时执行。我很高兴能使用多种网络技术来表达我的想法。当用户“注销”时,你到底想发生什么?我不想在注销后做任何事情。如果有任何困惑,我很抱歉,并感谢您的帮助。我的要求是,我想给任何用户说5分钟的时间。从用户登录时间起5分钟后,用户应自动注销并重定向到登录页面,无论他处于活动状态还是非活动状态。如果这是您所希望的,任何常用的会话机制都将工作。这只是因为他们是按要求做的,而不是“主动”。如果您想让用户在接近5分钟时注意到这一点,则需要使用页面刷新、AJAX或其他Javascript代码来保持浏览器与服务器状态同步。非常感谢!。我只是想知道是否有什么方法可以主动做。最后实现了页面刷新。我认为AJAX会增加服务器上的负载。是否可以实现php线程来主动执行它?感谢您的代码。我希望这能解决我的问题。谢谢你的时间。欢迎光临!如果它不工作,让我知道,这样我们可以帮助你。如果有效,请接受答案。我按照德韦恩·托威尔(Dwayne Towell)的建议实现了页面刷新。我没有时间实现上面的代码。非常感谢你花时间帮助我。一旦我测试,代码将在这里更新。
<?php
$sessiontime = 60; // 1 minute
$time = $_SESSION['login_time']-time()+$sessiontime;
?>
<script>
setTimeout(function() {
   $.ajax({
      url: '/path/to/logout-file.php',
      dataType: 'json',
      complete: function(){
         window.location.href = 'login.php';
      }
   });

}, (<?=$time?>*1000));
</script>