Я не уверен, что это решение для вас, но я опубликую, как я это сделал.
Я выхожу из системы через XX минут, но для сохранения сеанса в реальном времени я вызываю файл с помощью ajax и сбрасываю сессий. Если мое установленное время истекает, я уничтожаю сеанс. Это, конечно, будет работать только в том случае, если страница все еще открыта.
В заголовке я установил:
if(!empty($_SESSION['afkTime'])){
unset($_SESSION['afkTime']);
}
В тегах <head></head>
я проверяю, как пользователь времени журнала неактивен:
<script>
var refreshSn = function ()
{
var time = 1200000; // 20 mins | 1min = 60000 miliseconds
setTimeout(
function ()
{
$.ajax({
url: 'refresh_session.php',
cache: false,
success: function (data) { refreshSn(); console.log(data); if(data=='AFK logout'){ location.reload(); } }
});
},
time
);
};
// Call in page
refreshSn()
</script>
In refresh_session.php
, если время AFK больше, чем установленное мной время, и если да, то я выхожу из системы:
<?
session_start();
if(empty($_SESSION['afkTime'])){
$_SESSION['afkTime'] = 1200000;
$_SESSION['login_user'] = $_SESSION['login_user']; //REWRITE SESSION TO KEEP IT
$_SESSION['session_id'] = $_SESSION['session_id']; //REWRITE SESSION TO KEEP IT
echo 'AFK started';
die();
}else{
if(!empty($_SESSION['afkTime']) && $_SESSION['afkTime']>= 7200000){
unset($_SESSION);
session_destroy();
echo 'AFK logout';
die();
}else{
$_SESSION['afkTime'] = $_SESSION['afkTime']+1200000;
$_SESSION['login_user'] = $_SESSION['login_user']; //REWRITE SESSION TO KEEP IT
$_SESSION['session_id'] = $_SESSION['session_id']; //REWRITE SESSION TO KEEP IT
echo 'AFK '.$_SESSION['afkTime'];
die();
}
}