Я создал один проект в PHP, в который я управляю сессиями.
Я создаю сеанс в файле config.php, написав следующую строку кода.
session_start();
и уничтожить этот сеанс, в файле logout.php у меня есть следующая строка.
session_destroy();
и я не упоминаю какой-либо код для сеанса в любом другом файле проекта, но проблема в том, что сеанс активен до тех пор, пока я не вызову logout.php,
то, что я хочу, должен истекать, если пользователь неактивен в течение 15 минут.
может кто-нибудь помочь мне в этом, я новичок в PHP, пожалуйста, дайте пример кода или ссылку для достижения этого.
Вызовите функцию ниже в своем файле заголовка, чтобы каждый раз, когда пользователь делал какую-либо активность на этой странице, он обновлялся и проверял, нет ли сеанса или нет.
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 ()
См. Подробности здесь
Я знаю, что это ответный вопрос, но я просто хотел поделиться своим опытом, и, поскольку я чувствую, что это более простой подход. Я не уверен, что это лучший способ, но здесь. Я сделал это:
Я установил сеанс PHP ($ _SESSION ['timeout']) на текущее время (время ()), когда пользователь вошел в систему.
Написал следующую функцию, чтобы проверить, активен ли пользователь.
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; } }
Да, Камал прав насчет местоположения кодовых вставок. Одна часть как функция и другая в заголовке каждого файла или общей функции заголовка.