Slim PHP Framework Длина сеанса делает длиннее

Я пытаюсь выяснить, как сделать сеансы дольше в SLIM PHP Framework. Мне известны зашифрованные файлы cookie и функция сеанса файлов cookie., но я не могу использовать это, потому что данные, которые я храню в сеансе, больше, чем объем памяти, который может содержать cookie.

Есть ли способ сделать сеансы дольше?

Я попробовал следующий код без удачи до сих пор. Сеанс, кажется, длится около пары часов, а затем мне нужно заново войти в систему.

ini_set('session.cookie_lifetime', 60 * 60 * 24 * 7);
ini_set('session.gc_maxlifetime', 60 * 60 * 24 * 7);
session_cache_limiter(false);
session_start();

2

Решение

Сессии PHP очень чувствительны к конфигурации вашего сервера. Есть много возможных мест, где что-то может пойти не так:

Конфигурация сервера

Сервер может быть настроен так, чтобы вы не могли устанавливать эти конкретные переменные конфигурации через ini_set, Если вы не включили отчеты об ошибках для предупреждений, вы можете даже не знать, что эти строки не работают. Ты можешь использовать phpinfo чтобы увидеть фактические значения, используемые во время выполнения скрипта.

Debian / Ubuntu

Некоторые операционные системы, такие как Debian и Ubuntu, имеют свой собственный сборщик мусора, который периодически очищает сессии PHP: https://serverfault.com/questions/511609/why-does-debian-clean-php-sessions-with-a-cron-job-instead-of-using-phps-built .

Они не заботятся о вашем gc_maxlifetime установка; они просто работают по фиксированному графику.

Общий хостинг

Помните, что сессии PHP просто хранятся в виде файлов на сервере. На (плохо настроенных) общих серверах обычно все учетные записи серверов записывают свои сеансы в один и тот же каталог по умолчанию. Другими словами, ничего не установлено, чтобы различать, какие сеансы принадлежат какой учетной записи сервера.

Кроме того, значение gc_maxlifetime никак не связан с отдельными сессиями — это глобальное значение, которое устанавливается заново каждый раз, когда запускается скрипт. Добавьте к этому тот факт, что PHP вызывает сессионный сборщик мусора, когда session_start при вызове сценария другой учетной записи возможно удалить ваши сеансы в соответствии с любым значением gc_maxlifetime они используют при вызове.

Единственный способ справиться с этим является размещение ваших сессий в отдельном каталоге. Даже тогда вам нужно убедиться, что gc_maxlifetime устанавливается каждый раз, когда вызывается один из ваших собственных сценариев. В общем, это очень веская причина не использовать нативные сессии PHP, если это возможно. Пакеты как Сессионный модуль Laravel упростите развертывание альтернативных механизмов хранения сеансов, таких как memcache или database.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]