Я борюсь со странной проблемой, которая «отключает» пользователей и, кажется, случается примерно десять раз в день.
Приложение представляет собой старый проект PHP. Клиент авторизуется; сеанс PHP установлен. Иногда, если клиент ничего не делает, например, Через 2 часа, а затем отправляет новый HTTP-запрос, Apache отвечает HTTP 408
ошибка:
1.2.3.4 - - [17/Apr/2020:12:26:30 +0200] "-" 408 3281 "-" "-"
и пользователь отправляется на страницу входа и должен снова ввести свои учетные данные, теряя свои данные, которые они заполнили в форме и т. д. Я не могу воспроизвести проблему, в большинстве случаев бездействующий клиент может отправить следующий запрашивает даже через 5 часов и не вызывает 408. Это кажется довольно случайным и для всех браузеров.
Я могу воспроизвести ошибку 408, только если я вручную удалю файл сеанса PHP на сервере. Также странно то, что если я это сделаю, я не вижу 408 на панели инструментов разработчика Chrome, а только в журналах Apache.
Тайм-аут сеанса велик (72 часа). Эти параметры настраиваются:
php_value session.gc_maxlifetime 259200
php_value session.gc_divisor 1
php_value session.gc_probability 1
php_value session.cookie_lifetime 0
Теперь я много читал о KeepAlive
, но я думаю, что причина не в этом, так как на сайте не так много трафика. И мы говорим о часах, а не о секундах.
Это обычная проблема, и кто-нибудь может указать мне правильное направление?
РЕДАКТИРОВАТЬ:
session_unset()
не используется в проекте. session_destroy
вызывается только тогда, когда пользователь выходит из системы. Удалив файл сеанса в /var/lib/php/sessions
пользователь, конечно, вышел из системы, поэтому он перенаправляется на login.php
. Мне кажется, это нормально. Так что я думаю файл сеанса как-то удален.
Я также вижу это в error.log
:
[Fri Apr 17 22:42:32.386978 2020] [:error] [pid 15563] [client 1.2.3.4:55104] PHP Notice: session_start(): ps_files_cleanup_dir: opendir(/var/lib/php/sessions) failed: Permission denied (13) in /var/www/myproject/htdocs/sessionReload.php on line 2, referer: https://myproject/page.php
Строка 2 в sessionReload.php
является:
session_start();