как истечь сеанс php, если пользователь неактивен в течение 15 минут - PullRequest
13 голосов
/ 03 февраля 2012

Я создал один проект на PHP, в который я управляю сессиями.

Я создаю сессию в моем файле config.php, написав следующую строку кода.

session_start();

и чтобы уничтожить эту сессию, в файле logout.php я должен написать следующую строку.

session_destroy();

и я не упомянул какой-либо код для сессии в любом другом файле проекта, но проблема в том, что сессия активна, пока я не вызову logout.php,

я хочу, чтобы сессия истекла, если пользователь неактивен в течение 15 минут.

Может ли кто-нибудь помочь мне в этом, я новичок в PHP, пожалуйста, приведите пример кода или ссылку для достижения этой цели.

Ответы [ 6 ]

15 голосов
/ 03 февраля 2012

Вызовите функцию ниже в вашем заголовочном файле, чтобы всякий раз, когда пользователь выполняет какие-либо действия в это время, страница обновлялась и проверяла, истекло ли время ожидания сеанса.

function auto_logout($field)
{
    $t = time();
    $t0 = $_SESSION[$field];
    $diff = $t - $t0;
    if ($diff > 1500 || !isset($t0))
    {          
        return true;
    }
    else
    {
        $_SESSION[$field] = time();
    }
}

Используйте что-то подобное в заголовке

    if(auto_logout("user_time"))
    {
        session_unset();
        session_destroy();
        location("login.php");          
        exit;
    }       

User_time - имя сеанса. Я надеюсь, что этот ответ поможет вам. На самом деле этот код выполняет следующие действия: «Проверяет, больше ли diff больше 1500 секунд или нет. Если нет, тогда установите новое время сеанса». Вы можете изменить разницу в времени (1500) в соответствии с вашими требованиями.

4 голосов
/ 03 февраля 2012

try

  ini_set('session.gc_maxlifetime',54000);  
  ini_set('session.gc_probability',1);
  ini_set('session.gc_divisor',1); 

используйте это перед вызовом session_start ()

2 голосов
/ 13 мая 2015

Сохранить time() в переменной $time.создайте переменную с именем $setTime и установите желаемое время ожидания пользователя.

После этого проверьте условие, что если $_SESSION['setTime'] пусто ИЛИ не задано, сохраните значение времени ожидания в сеансе, в противном случае, когда страницабудет обновлено, новое значение будет присвоено $_SESSION['setTime'].

$time = time ();
    $setTime = time () + 60;
    if (empty ( $_SESSION ['setTime'] ) || !isset ( $_SESSION ['setTime'] )) {
        $_SESSION ['setTime'] = $setTime;
    }

После этого убедитесь, что текущее время более чем равно сохраненному времени.и если это не установлено, сеанс.также уничтожить сессию.

if (time () >= ( int ) $_SESSION ['setTime']) {
   session_unset ();
   session_destroy ();
}
1 голос
/ 10 февраля 2013

Я знаю, что это ответ на вопрос, но я просто хотел поделиться своим опытом, и так как я чувствую, что это более легкий подход.Я не уверен, что это лучший способ, но здесь идет.Я сделал следующее:

  1. Я установил для PHP-сессии ($ _SESSION ['timeout']) текущее время (время ()), когда пользователь вошел в систему.

  2. Написал следующую функцию для проверки того, активен ли пользователь.

function sessionTimeOut () {

// Эта функциядобавление 900 секунд (15 минут, то есть промежутка времени, когда вы хотите, чтобы пользователь // был неактивен для автоматического выхода из системы) к ранее зарегистрированному времени, когда пользователь последний раз был активным.// Затем он проверяет, превышает ли текущее время количество времени, в течение которого вы хотите, чтобы пользователь // оставался в системе без тайм-аута (что составляет 15 минут).Если оно больше, то вы будете перенаправлены на // страницу входа, где вы можете запустить функцию выхода из системы с помощью http://www.yourwebpage/login.php?status=timeout в URL.

if ($ _SESSION ['timeout'] + 900>time ()) {

  // User Active so reset time session.
  $_SESSION['timeout'] = time();

} else {

  // session timed out then redirect to login page
  header('Location:http://'. $_SERVER[HTTP_HOST] . '/login.php?status=timeout');

}

}

И наконец: Call sessionTimeOut ();Функция в заголовке после проверки, вошел ли пользователь в систему. Это позволяет вызывать функцию каждый раз, когда пользователь обновляет или переходит на новую страницу.Таким образом, он работает отлично (по крайней мере, в моем случае), выполняет мою цель, поэтому я подумал, что просто поделюсь этим с вами, ребята.

1 голос
/ 03 февраля 2012

Вы можете использовать что-то вроде этого

# Session Logout after in activity 
function sessionX(){ 
    $logLength = 1800; # time in seconds :: 1800 = 30 minutes 
    $ctime = strtotime("now"); # Create a time from a string 
    # If no session time is created, create one 
    if(!isset($_SESSION['sessionX'])){  
        # create session time 
        $_SESSION['sessionX'] = $ctime;  
    }else{ 
        # Check if they have exceded the time limit of inactivity 
        if(((strtotime("now") - $_SESSION['sessionX']) > $logLength) && isLogged()){ 
            # If exceded the time, log the user out 
            logOut(); 
            # Redirect to login page to log back in 
            header("Location: /login.php"); 
            exit; 
        }else{ 
            # If they have not exceded the time limit of inactivity, keep them logged in 
            $_SESSION['sessionX'] = $ctime; 
        } 
    } 
} 

Но помните, что функция sessionX () ДОЛЖНА приходить после session_start ()

Подробнее здесь

0 голосов
/ 14 февраля 2014

Это продолжение того, что написал Камал.Я попробовал тот же код, но заставил его работать, изменив его, как показано ниже:

/* code */
function fnlogout($field)
{
    $t = time();
    if (!isset($_SESSION[$field]))
        $_SESSION[$field] = time();
    $t0 = $_SESSION[$field];
    $diff = $t - $t0;
    if ($diff > 60)
    {        
        return true;
    }enter code here
    else
    {
        return false;
    }
}
function fnheader()
{
    if(fnlogout("user_time"))
    {
        session_unset();
        session_destroy();
        header("location:index.php?action=expired");
        exit;
    }
}

Да, Камаль прав насчет расположения вставок кода.Одна часть как функция и другая в заголовке каждого файла или общей функции заголовка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...