PHP - уничтожить сессию, если не было никаких действий за 10 минут - PullRequest
7 голосов
/ 29 января 2012

Есть ли возможность уничтожить сеанс, если пользователь не выполняет никаких действий в течение 10 минут?

Ответы [ 5 ]

12 голосов
/ 29 января 2012
session_start();

// 10 mins in seconds
$inactive = 600; 

$session_life = time() - $_session['timeout'];

if($session_life > $inactive)
{  session_destroy(); header("Location: logoutpage.php");     }

S_session['timeout']=time();

Код выше был взят с этой конкретной страницы.

10 голосов
/ 29 января 2012

Попробуйте установить время ожидания сеанса на 10 минут.

ini_set('session.gc_maxlifetime',10);
3 голосов
/ 26 сентября 2013

Я изменил ответ выше, и он отлично работает:

// inactive in seconds
$inactive = 10;
if( !isset($_SESSION['timeout']) )
$_SESSION['timeout'] = time() + $inactive; 

$session_life = time() - $_SESSION['timeout'];

if($session_life > $inactive)
{  session_destroy(); header("Location:index.php");     }

$_SESSION['timeout']=time();
2 голосов
/ 09 июля 2018

Включение следующего javascript на страницу вызовет проверку на бездействие, вызывая функцию CheckIdleTime() каждую секунду. Активность на странице сбрасывается с _idleSecondsCounter до 0.

<script type="text/javascript">
    var IDLE_TIMEOUT = 10 * 60;  // 10 minutes of inactivity
    var _idleSecondsCounter = 0;
    document.onclick = function() {
        _idleSecondsCounter = 0;
    };
    document.onmousemove = function() {
        _idleSecondsCounter = 0;
    };
    document.onkeypress = function() {
        _idleSecondsCounter = 0;
    };
    window.setInterval(CheckIdleTime, 1000);
    function CheckIdleTime() {
        _idleSecondsCounter++;
        var oPanel = document.getElementById("SecondsUntilExpire");
        if (oPanel)
            oPanel.innerHTML = (IDLE_TIMEOUT - _idleSecondsCounter) + "";
        if (_idleSecondsCounter >= IDLE_TIMEOUT) {
            // destroy the session in logout.php 
            document.location.href = "logout.php";
        }
    }
</script>
1 голос
/ 29 января 2012

сравнить метки времени между двумя запросами, один из текущего запроса, другой сохраненный в сеансе.

...