Вы пытаетесь различить сеанс тайм-аута и сеанс, который был завершен вручную?
Ваша проблема в том, что, поскольку данные сеанса пропали, все, что вам нужно, - это то, что новый входящий запрос создал новый сеанс, а входящий запрос содержит cookie-файл идентификатора сеанса (указывающий, что он был зарегистрирован до ).
Есть два подхода.
Cookie:
Сначала на странице входа в систему вы можете создать дополнительный файл cookie, который указывает статус входа пользователя. Когда пользователь вручную выходит из системы, значение cookie изменяется, чтобы указать выход из системы. Запрос после истечения времени ожидания сеанса, помимо IsNewSession
true, будет также иметь файл cookie состояния входа, показывающий, что пользователь все еще вошел в систему, что означает, что пользователь не выбрал выход из системы вручную.
База данных:
Второй подход заключается в сохранении идентификаторов сеансов в таблице БД вместе с состоянием входа в систему. После успешного входа в систему введите sessionID в таблицу LoggedOnSessions. Когда пользователь выходит из системы вручную, удалите sessionID из таблицы. Следовательно, ваше обнаружение тайм-аута может включать в себя поиск идентификатора сеанса в таблице, если это был тайм-аут (в этот момент вам, вероятно, также следует удалить идентификатор).
В целях ведения домашнего хозяйства вы должны включить поле даты истечения срока действия, которое устанавливается намного дольше, чем любой реалистичный период входа в систему (например, неделя). Регулярно (например, еженедельно) удаляйте записи в таблице с истекшим сроком действия.
Я предпочитаю подход с базой данных, я ненавижу устанавливать файлы cookie, потому что меня раздражает, что этот файл cookie отправляется при каждом запросе, но редко требуется.