Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
if ( $idLifetime ) {
if ( isset($_SESSION['starttime']) ) {
if ( $t-$_SESSION['starttime'] >= $idLifetime ) {
session_regenerate_id(true);
$_SESSION['starttime'] = $t;
}
}
else {
$_SESSION['starttime'] = $t;
}
}
Здесь следует отметить, что параметр session.gc_maxlifetime действует на все сессии в пределах одного сервера.
find удаляет файлы сессий, к которым последний раз к ним обращались больше, чем session.gc_maxlifetime/60 минут назад.session.gc_maxlifetime задает отсрочку времени в секундах, после которой данные будут рассматриваться как «мусор» и потенциально будут удалены. Сбор мусора может произойти в течение старта сессии (в зависимости от значений session.gc_probability и session.gc_divisor).
Для очистки старых сессий в PHP существует механизм под названием garbage collection. Он запускается в момент очередного запроса к серверу и чистит все старые сессии на основании даты последнего изменения файлов сессий. Но запуск механизма garbage collection происходит не при каждом запросе к серверу. Частота (а точнее, вероятность) запуска определяется двумя параметрами настроек session.gc_probability и session.gc_divisor. Результат от деления первого параметра на второй и есть вероятностью запуска механизма garbage collection.
Первый вопрос, который часто возникает у разработчиков всевозможных консолей для пользователей — автоматическое завершение сеанса в случае отсутствия активности со стороны пользователя. Нет ничего проще, чем сделать это с помощью встроенных возможностей PHP.
function startSession() { // Таймаут отсутствия активности пользователя (в секундах) $sessionLifetime = 300; if ( session_id() ) return true; // Если таймаут отсутствия активности пользователя задан, устанавливаем время жизни сессии на сервере // Примечание: Для production-сервера рекомендуется предустановить этот параметр в файле php.ini if ( $sessionLifetime ) ini_set('session.gc_maxlifetime', $sessionLifetime); return session_start(); }
function startSession() {
$sessionLifetime = 300;
if ( session_id() ) return true;
ini_set('session.cookie_lifetime', $sessionLifetime);
if ( $sessionLifetime ) ini_set('session.gc_maxlifetime', $sessionLifetime);
if ( session_start() ) {
setcookie(session_name(), session_id(), time()+$sessionLifetime);
return true;
}
else return false;
}
setcookie(session_name(), session_id(), time()+$sessionLifetime);
браузер закрывается и очищает все свои куки
… вместо того, чтобы строить здесь полноценное тестовое приложение с… исчерпывающей обработкой ошибок ...
а когда он получает 401 на форме логона, это значит, что аутентификация не прошла (аналогично, других вариантов быть не может).
403 Forbidden
The request was a valid request, but the server is refusing to respond to it. Unlike a 401 Unauthorized response, authenticating will make no difference. On servers where authentication is required, this commonly means that the provided credentials were successfully authenticated but that the credentials still do not grant the client permission to access the resource (e.g. a recognized user attempting to access restricted content).
if ( session_id() ) return true;
function startSession() {
// установка параметров сессии
if (!session_start())
throw new Exception('Сессия не может быть запущена (либо сервер гонит, либо что-то не так с кодом)');
}
function startSession() {
// установка параметров сессии
session_start();
if (!session_id())
throw new Exception('Сессия не может быть запущена (либо сервер гонит, либо что-то не так с кодом)');
}
Подводные камни использования сессий в PHP