Это не новая проблема, есть несколько сценариев, которые должны быть обработаны, если вы хотите отследить все способы завершения сеанса, вот общие примеры некоторых из них:
- Экземпляр или вкладка браузера закрыты.
- Пользователь уходит с вашего сайта, используя тот же экземпляр браузера или вкладку.
- Пользователи теряют подключение к Интернету (это может включать в себя отключение питания компьютера пользователя или любые другие средства).
- Пользователь уходит от компьютера (или каким-либо другим способом прекращает взаимодействие с вашим сайтом).
- Сервер теряет питание / перезагружается.
Первые два элемента должны обрабатываться клиентом, отправляющим информацию на сервер, обычно вы используете javascript для перехода на страницу выхода из системы, которая быстро завершает сеанс.
Третий и четвертый элементы обычно обрабатываются путем установки тайм-аута состояния сеанса (это может быть любое количество времени). Количество времени, которое вы используете, основано на поиске значения, которое позволяет пользователям использовать ваш сайт, не перегружая сервер. Очень грубое правило может составить 30 минут плюс или минус 10 минут. Однако соответствующее значение, вероятно, должно быть предметом другого сообщения.
Пятый элемент обрабатывается в зависимости от того, как вы храните свои сессии. Сеансы, сохраненные в состоянии, не переживут перезагрузку, так как они находятся в оперативной памяти компьютера. Сеансы, сохраненные в БД или cookie, переживут перезагрузку. Вы можете справиться с этим, как считаете нужным.
По моему ограниченному опыту, когда эта проблема уже возникала, было определено, что все, что нужно, - это просто установить для времени ожидания сеанса приемлемое значение. Однако это может быть сделано.