Когда завершается браузерная сессия (sessionStorage)?

Ответ

Сессия sessionStorage в веб-браузере завершается при следующих условиях:

  1. Закрытие вкладки браузера — данные удаляются для конкретной вкладки.
  2. Закрытие окна браузера — если не активирована функция восстановления сессии.
  3. Явный вызов JavaScript-методов:
    • sessionStorage.clear() — удаляет все данные сессии.
    • sessionStorage.removeItem('key') — удаляет значение по конкретному ключу.

Ключевые отличия от localStorage:

  • sessionStorage привязан к вкладке/окну, а localStorage — к источнику (origin) и сохраняется между сессиями.
  • Данные sessionStorage не отправляются на сервер автоматически с каждым HTTP-запросом (в отличие от cookies).

Пример работы:

// Сохранение данных на время сессии вкладки
sessionStorage.setItem('authToken', 'abc123xyz');
sessionStorage.setItem('userPreferences', JSON.stringify({ theme: 'dark' }));

// Получение данных
const token = sessionStorage.getItem('authToken');
const prefs = JSON.parse(sessionStorage.getItem('userPreferences'));

// Удаление данных
sessionStorage.removeItem('authToken');
// Или полная очистка
sessionStorage.clear();

Важно: Время жизни не зависит от таймаута, только от состояния вкладки/окна.

Ответ 18+ 🔞

А, ну это ж про ту самую штуку, которая живёт, пока вкладка не прикрылась! sessionStorage, блядь. Ну слушай, тут всё просто, как три копейки.

Вот представь: открыл ты в браузере вкладку — и для неё, как в отдельной квартире, заводится свой sessionStorage. И живёт он ровно до того момента, пока ты эту вкладку не прикроешь. Хлопнул крышку — всё, пиздец, квартира сгорела со всем содержимым. Данные удалились нахуй.

Так когда конкретно всё накрывается медным тазом?

  1. Закрыл вкладку — ну, тут всё ясно, блядь. Данные — в тартарары, только для этой вкладки.
  2. Закрыл всё окно браузера целиком — тут то же самое, если только у тебя не включено восстановление сессий, эта хитрая жопа.
  3. Сам, своими руками, через код всё выкосил — ну тут уж сам виноват, блядь:
    • sessionStorage.clear() — это как взять и выгрести всё из квартиры в мусорный бак. Чистота, нихуя не осталось.
    • sessionStorage.removeItem('ключ') — а это точечно, как выкинуть один старый хлам, например, стул.

А чем это, сука, отличается от localStorage?

А вот тут, блядь, ключевой момент, запомни как "Отче наш":

  • sessionStorage — это твоя одноразовая съёмная хата на одну вкладку. Закрыл — и всё, свободна, блядь, комната.
  • localStorage — это уже твоя постоянная прописка на всём домене (origin). Закрыл браузер, выключил комп, пришёл через неделю — а твои данные всё ещё там, как ни в чём не бывало. Они между сессиями сохраняются, ёпта.

И ещё, что важно: эти данные не лезут на сервер сами, в отличие от куков, которые с каждым запросом, как назойливые мухи, летят туда-сюда. Тут всё тихо, локально.

Ну и как с этим работать-то, на практике?

Смотри, вот тебе живой пример, как это всё выглядит в коде:

// Записываем что-то на время сессии этой вкладки
sessionStorage.setItem('authToken', 'abc123xyz'); // Допустим, токен авторизации
sessionStorage.setItem('userPreferences', JSON.stringify({ theme: 'dark' })); // Настройки пользователя

// Потом где-то в другом месте скрипта достаём
const token = sessionStorage.getItem('authToken'); // Достали токен
const prefs = JSON.parse(sessionStorage.getItem('userPreferences')); // Достали и распарсили настройки

// А когда надо почистить за собой
sessionStorage.removeItem('authToken'); // Выкинули только токен
// Или вообще всё к хуям
sessionStorage.clear(); // Полная зачистка, нихуя не осталось

И главное, блядь, что тут нет никакого таймаута по времени! Не будет так, что "через 15 минут само удалится". Нет. Только состояние вкладки решает — открыта она или уже в аду. Вот и вся философия.