как истечь сеанс php, если пользователь неактивен в течение 15 минут

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

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

session_start(); 

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

 session_destroy(); 

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

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

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

Related of "как истечь сеанс php, если пользователь неактивен в течение 15 минут"

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

 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 – это имя сеанса. Надеюсь, этот ответ вам поможет. Что на самом деле делает этот код: «Проверяет, превышает ли значение более 1500 секунд или нет. Если нет, то установите новое время сеанса». Вы можете изменить time diff (1500) в соответствии с вашим требованием.

пытаться

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

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

Храните 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 (); } 

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

 # 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 ()

См. Подробности здесь

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

  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'); 

}

}

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

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

 /* 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; } } 

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