У меня есть довольно большое PHP-приложение (несколько тысяч уникальных URL-адресов, логины пользователей с различными ролями и т. д.). PHP имеет тайм-аут сеанса, установленный на 1 час (3600 секунд) в php.ini. Вход в систему работает следующим образом: когда пользователь успешно входит в приложение, в $_SESSION сохраняется несколько сведений о пользователе, включая имя пользователя, настоящее имя, идентификатор роли и т. д. При доступе к каждой странице (общий код) $ _SESSION проверяется на наличие этих переменных и, если они присутствуют, пользователь переходит туда, куда он просил. Если переменных нет, то пользователь перенаправляется на страницу «не авторизованный».
Это работало нормально в течение последних нескольких лет и до сих пор работает нормально - в основном. Очень случайно сеанс сеанса, кажется, истекает без каких-либо предупреждений или чего-либо еще. Для вошедшего в систему пользователя это выглядит так: войдите в систему, сделайте что-нибудь, перейдите на следующую страницу — и вместо этого выйдите из системы и вернитесь на страницу «не вошедшей в систему». Естественно, это крайне раздражает. Однако случайный характер этого поведения чрезвычайно затрудняет его исследование.
Я никогда не сталкивался с этим на своей машине ни в одном браузере. В офисе есть еще одна машина, где это постоянно происходит в каждом браузере (по крайней мере, я могу воспроизвести проблему). На еще одной машине это происходит в одном браузере и не происходит в другом браузере. И все же на другой машине это происходит иногда, а иногда нет. Сегодня нам позвонил один из клиентов, у которого возникла эта проблема, но когда его попросили попробовать в другом браузере, все сработало нормально.
Это не связано с версией браузера, так как он работает на некоторых машинах, а не на других с той же версией. Более того, имея две одинаково настроенные машины, иногда на одной это происходит, а на другой никогда. В целом кажется, что с сессиями происходит что-то очень-очень странное, но я совершенно не понимаю, где искать. Я пытался исследовать это большую часть последних нескольких месяцев, но ничего не добился. Где еще искать?
На данный момент любая помощь более чем приветствуется.
ДОБАВЛЕНО: вот часть session моего php.ini:
[Session]
session.save_handler = files
session.use_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_divisor = 100
session.gc_maxlifetime = 3600
session.bug_compat_42 = 1
session.bug_compat_warn = 1
session.referer_check =
session.entropy_length = 0
session.entropy_file =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 4
session.save_handler = filesиsession.serialize_handler = php- person Aleks G   schedule 19.04.2012