Установить тайм-аут сеанса в PHP

  1. Используйте функции session_unset() и session_destroy() для установки тайм-аута сеанса в PHP
  2. Используйте функцию unset() для установки тайм-аута сеанса в PHP
  3. Используйте функцию session_regenerate_id() для изменения идентификатора текущего сеанса в PHP

В этой статье будет представлен метод уничтожения сеанса в PHP с помощью функций session_unset() и session_destroy(). Мы уничтожим сеанс через 30 минут. Он проверяет временной интервал от последнего действия до текущего времени, чтобы уничтожить сеанс.

Мы также продемонстрируем другой способ установки тайм-аута сеанса в PHP с помощью функции unset(). Функция unset() принимает в качестве параметра переменную сеанса. Этот метод использует массив для хранения переменной сеанса.

Мы представим еще один метод аннулирования текущего идентификатора сеанса с помощью функции session_regenerate_id(). Эта функция генерирует новый идентификатор сеанса для текущего сеанса, уничтожая предыдущий идентификатор сеанса.

Используйте функции session_unset() и session_destroy() для установки тайм-аута сеанса в PHP

Мы можем использовать функцию session_unset(), чтобы отключить переменную $_SESSION во время выполнения и использовать функцию session_destroy() для уничтожения сеанса из хранилища. Функция time() возвращает текущее время. Мы можем использовать переменную $_SESSION для хранения отметки времени последнего действия. Таким образом, мы можем проверить время, вычислив разницу между последним действием и текущим временем. Таким образом мы проверяем временной интервал сеанса.

Например, запустите сеанс на сервере с помощью функции session_start(). Проверьте, создана ли сессия с помощью функции isset(). Используйте оператор &&, чтобы проверить другое условие внутри функции issset(). Вычтите переменную сеанса start из функции time() и проверьте результат, если он больше 1800. Используйте session_unset() и session_destroy() внутри условия if. Затем отобразите сообщение о том, что сеанс был уничтожен. Вне условия if создайте переменную сеанса $_SESSION['start'] и назначьте ей функцию time() для обновления сеанса.

Условие if не выполняется, поскольку переменная сеанса еще не была создана в приведенном ниже примере. Сеанс будет создан при сбое условия. Сеанс истекает через 30 минут, если пользователь не отправит запрос на сервер. Последняя часть функции isset() проверяет общее время активности сеанса. 1800 означает 1800 секунд, что эквивалентно 30 минутам. Если общее время активности превышает 30 минут, условие if будет истинным. Затем он разрушает сеанс. Вывод кода соответствует уничтожению сеанса после более чем 30 минут активного времени. Прочтите Руководство по PHP, чтобы узнать больше о функции session_unset().

Пример кода:

# php 7.*
<?php
session_start();
if (isset($_SESSION['start']) && (time() - $_SESSION['start'] > 1800)) {
    session_unset(); 
    session_destroy(); 
    echo "session destroyed"; 
}
$_SESSION['start'] = time();
?>

Выход:

session destroyed

Используйте функцию unset() для установки тайм-аута сеанса в PHP

Мы можем использовать функцию unset() для уничтожения сеанса определенной переменной сеанса в PHP. Функция принимает в качестве параметра переменную $_SESSION. Этот метод сохраняет сеанс в массиве. Мы можем использовать ассоциативный массив для хранения имени сеанса и времени начала сеанса. Мы можем использовать функцию time(), чтобы получить текущее время. Мы можем проверить временной интервал сеанса, следуя описанному выше методу, вычтя время активного сеанса из текущего времени.

Например, используйте функцию session_start() для запуска сеанса. Напишите переменную сеанса $_SESSION['start'] и присвойте ей ассоциативный массив. Напишите ключи 0 и registered и запишите значения active и time() для соответствующих ключей. Проверьте, не превышает ли временной интервал 30 минут. Если условие истинно, напишите функцию unset() с параметром $_SESSION['start']. Затем отобразите сообщение session destroyed. Вне блока условия if обновите переменную сеанса $_SESSION['start'] функцией time().

В приведенном ниже примере массив содержит переменную сеанса. Значение переменной сеанса active. Функция time() создает текущую метку времени в массиве, а ключ registered содержит значение. Пожалуйста, проверьте Руководство по PHP, чтобы узнать больше о суперглобальной переменной $_SESSION.

Пример кода:

#php 7.x
<?php
session_start();
$_SESSION['start'] = array(0=> 'active', 'registered' => time())
if ((time() - $_SESSION['start']['registered']) > (60 * 30)) {
    unset($_SESSION['start']);
    echo "session destroyed";
}
$_SESSION['start'] = time();
?>

Выход:

session destroyed

Используйте функцию session_regenerate_id() для изменения идентификатора текущего сеанса в PHP

Мы можем использовать функцию session_regenerate_id() для изменения идентификатора текущего сеанса. Таким образом, мы можем предотвратить фиксацию сеанса в нашем скрипте. Логическое значение true в функции позволяет генерировать новый идентификатор сеанса. В этом методе мы можем распечатать идентификатор сеанса с помощью функции session_id() до и после регенерации идентификатора сеанса. Но сеанс не истекает при изменении идентификатора сеанса. Он только просит пользователя снова войти в систему. Следовательно, это предотвращает фиксацию сеанса.

Например, запустите сеанс с помощью функции session_id(). Отображение идентификатора текущего сеанса с помощью функции session_id(). Проверьте, создана ли сессия и создайте сессию $_SESSION['start'] и назначьте функцию time(). Найдите временной интервал активности сеанса, как мы это делали в вышеупомянутом методе. Если условие истинно, используйте функцию session_regenerate_id(true). Обновите переменную сеанса. В конце скрипта выведите новый идентификатор сеанса с помощью функции session_id().

Пример кода:

#php 7.x
<?php
session_start();
print("Old: ".session_id());
echo "<br>";
if (!isset($_SESSION['start'])) {
    $_SESSION['start'] = time();
} else if (time() - $_SESSION['start'] > 1800) {
    session_regenerate_id(true); 
    $_SESSION['start'] = time(); 
}
print("Now: ".session_id());
?>

Выход:

​Old: t38kssej37un38mtsoa6lovh05 
Now: mak7i3in708c6rl2udd8gbfo3r ​ ​