Что такое сессия в приложении?
Что проверяют
Различаете ли вы сессию как состояние на сервере и сессию как отрезок активности пользователя. За этим стоит умение придумать проверки на времена жизни, на несколько устройств и на поведение после перезапуска сервиса.
Как отвечать
Сначала развести два смысла. Техническая сессия аутентификации: сервер помнит, кто вы, и хранит связанное состояние между запросами. Аналитическая сессия: отрезок активности, который закрывается по паузе бездействия и нужен метрикам. Проверяются они по-разному, и путаница в термине стоит неверных ожиданий в баг-репорте.
Жизненный цикл технической сессии: создание при входе, идентификатор в cookie или заголовке, состояние в памяти процесса, в общем хранилище вроде Redis или целиком в подписанном токене у клиента, продление при активности, завершение при выходе, по таймауту простоя и по абсолютному сроку.
Что стоит проверить: оба таймаута по отдельности, работу при нескольких вкладках и устройствах, принудительное завершение чужих сессий из настроек, выживание сессии при перезапуске и при переключении между репликами, возврат мобильного приложения из фона после долгой паузы, судьбу корзины и черновиков анонимной сессии после входа.
Где спотыкаются
Проверяют только таймаут простоя и не находят второго. Абсолютный срок жизни ограничивает сессию независимо от активности, и без него украденное значение работает месяцами, потому что фоновые запросы страницы бесконечно его продлевают.
Тестируют на одном экземпляре приложения. В проде реплик несколько, и сессия, лежащая в памяти процесса, теряется при попадании запроса на соседний узел; на стенде с единственным процессом дефект не воспроизводится вообще.
Считают, что закрытие вкладки завершает сессию. Сессионная cookie исчезает у клиента, но запись на сервере живёт до таймаута, а восстановление вкладок в браузере возвращает и её саму.