Как истечь сеанс php, если пользователь неактивен в течение 15 минут
Я создал один проект в PHP, в который я управляю сеансами.
Я создаю сеанс в файле config.php, написав следующую строку кода.
session_start();
и уничтожить этот сеанс, в файле logout.php у меня есть следующая строка.
session_destroy();
и я не упоминаю никакого кода для сеанса в любом другом файле проекта, но проблема в том, что сеанс активен до тех пор, пока я не вызову logout.php,
то, что я хочу, должен истекать, если пользователь неактивен в течение 15 минут.
может кто-нибудь помочь мне в этом, я новичок в PHP, пожалуйста, дайте пример кода или ссылку для достижения этого.
Ответы
Ответ 1
Вызов функции ниже в вашем файле заголовка, так что всякий раз, когда пользователь делает какие-либо действия на этой странице времени, обновляется и проверяет, не выходят ли сеансы или нет.
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) в соответствии с вашими требованиями.
Ответ 2
попробуйте
ini_set('session.gc_maxlifetime',54000);
ini_set('session.gc_probability',1);
ini_set('session.gc_divisor',1);
используйте это перед вызовом session_start()
Ответ 3
Сохранить 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 ();
}
Ответ 4
Вы можете использовать что-то вроде этого
# 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()
Подробнее здесь
Ответ 5
Я знаю, что это ответ на вопрос, но я просто хотел поделиться своим опытом, и поскольку я чувствую, что это более простой подход. Я не уверен, что это лучший способ, но здесь. Я сделал это:
-
Я установил сеанс 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(); функцию в заголовке после проверки входа пользователя в систему. Это позволяет вызывать функцию каждый раз, когда пользователь обновляется или переходит на новую страницу. Таким образом, он отлично работает (по крайней мере, в моем случае), выполняет мою цель, поэтому я решил поделиться с вами ребятами.
Ответ 6
Это продолжение к тому, что опубликовал Камал. Я пробовал один и тот же код, но запустил его, изменив его, как показано ниже:
/* 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;
}
}
Да, Камал прав насчет расположения вставки кода. Одна часть как функция и другая в заголовке каждого файла или общей функции заголовка.