Что происходит с авторизацией при закрытии и повторном открытии браузера
Что проверяют
Понимаете ли, где физически лежит признак входа и что из этого переживает перезапуск браузера. Проверяют знание жизненного цикла кук и хранилищ, а не умение произнести слово «токен».
Как отвечать
Разложите по местам хранения:
- сессионная кука, то есть без
ExpiresиMax-Age, живёт до конца сессии браузера и при закрытии должна исчезнуть; - постоянная кука с
Max-Ageперезапуск переживает и вернёт пользователя внутрь, пока не истёк срок и пока сервер считает сессию живой; localStorageпереживает перезапуск,sessionStorageпривязан к вкладке и пропадает вместе с ней;- значение, которое держат только в памяти страницы, теряется даже при обычной перезагрузке.
Обязательно добавьте оговорку: «должна исчезнуть» не равно «исчезнет». При включённом восстановлении вкладок браузеры восстанавливают и сессионные куки, поэтому пользователь остаётся авторизованным. Считать закрытие браузера выходом нельзя.
Схема, которую обычно ждут: короткоживущий токен доступа в памяти, токен обновления в куке с флагами HttpOnly, Secure и SameSite, а при старте приложения тихий запрос на обновление. Тогда решение принимает сервер, и отзыв сессии работает по-настоящему.
Где спотыкаются
Отвечают одной фразой про куки и не упоминают серверную сторону. Кука это только предъявление, а живёт сессия там, где её хранит сервер: она могла истечь по неактивности, быть отозванной или удалённой при смене пароля.
Второе: называют localStorage безопасным хранилищем, потому что чужой домен его не прочитает. Читает его любой скрипт, выполнившийся на самой странице, и это ровно сценарий XSS. Кука с HttpOnly от скрипта закрыта, но требует защиты от подделки запроса через SameSite и токен формы.
Третье: путают срок куки со сроком доступа. Самоподписанный токен остаётся валидным до своего истечения и после выхода, если рядом нет списка отозванных или короткого срока жизни. Про это стоит сказать самому, не дожидаясь наводящего вопроса.