У меня есть несколько веб-сайтов CakePHP 2.5.1, работающих в производственной среде LAMP с PHP 5.3.29 и MySQL 5.6 (я знаю, это старый материал). Они используют Auth, чтобы защитить доступ к ним только для зарегистрированных пользователей. У этих веб-сайтов не было проблем в течение многих лет.
Недавно мы начали получать жалобы от пользователей на то, что их выгоняют с этих сайтов, хотя, казалось бы, этого быть не должно, однажды это случилось даже со мной. Я имею в виду получение типичного сообщения, которое мы показываем, когда кто-то пытается получить доступ к защищенной странице после истечения срока действия его сеанса и попадает на страницу входа. Только то, что эти сеансы истекают быстрее, чем должны. Мы используем сеансы базы данных для этих сайтов, вот конфиг:
Configure::write('Session', array(
'defaults' => 'database',
'handler' => array('model' => 'cake_sessions'),
'timeout' => 60
));
Configure::write('Security.level', 'low');
Самое странное, что после того, как вас выгнали, если вы снова войдете в систему и попытаетесь получить доступ к странице, к которой вы не обращались в предыдущем сеансе, вас снова выкинет на страницу входа. Но если вы получаете доступ к странице, к которой вы обращались до того, как вас выгнали в предыдущем сеансе, вы можете получить к ней доступ без проблем. Я предполагаю, что это может быть связано с кешированием, но я никогда раньше не видел, чтобы что-то подобное происходило на этих сайтах, поэтому я решил упомянуть об этом на всякий случай.
Код этих сайтов не менялся годами. Единственное изменение заключается в том, что на сервере, на котором расположены эти веб-сайты, была изменена некоторая конфигурация PHP, где они включили PHP-FPM, и это действительно так. похоже, что эти проблемы начались примерно в одно и то же время, но я не знаю, как установить связь между этим и сеансами. Также я не думаю, что мы можем отключить это.
Я занимался устранением неполадок, печатал переменные сеанса при использовании этих сайтов, просматривал таблицу базы данных, которая обрабатывает сеансы, проверял идентификаторы сеансов, тайм-ауты, файлы cookie и т. д., и, насколько я могу судить, все выглядит нормально. Сеансы автоматически обновляются, когда я перехожу на другие страницы, они показывают правильную продолжительность, файлы cookie Cakephp показывают правильные идентификаторы сеанса и т. д. Мне не удалось воспроизвести проблему или найти что-то неправильное в коде, базе данных, файлах cookie или Сеанс PHP. Но, возможно, я ищу не в тех местах.
На самом деле у меня есть 2 вопроса:
- Кто-нибудь знает, что может происходить здесь с сессиями? Что может вызвать преждевременное завершение сеанса?
- Может ли кто-нибудь предложить мне способ устранения этой неполадки? Как-то повторить проблему?