Гид по технологиям

Управление сессиями в React с помощью cookies и sessionStorage

8 min read Frontend Обновлено 09 Jan 2026
Сессии в React: cookies и sessionStorage
Сессии в React: cookies и sessionStorage

Кэширование данных аутентификации в браузере (cookies или sessionStorage) позволяет поддерживать сессию пользователя без постоянного повторного входа. Cookies подходят для сохранения между сессиями, sessionStorage — для изолированной сессии в одной вкладке. В статье приведены примеры кода для React (Vite), рекомендации по безопасности, чек‑листы для разработчиков и варианты обхода ограничений.

Зачем хранить сессионные данные

Аутентификация — это барьер безопасности, который подтверждает личность пользователя и даёт доступ к защищённым ресурсам. Если приложение требует повторной авторизации в пределах одной сессии, это ухудшает UX и снижает продуктивность.

Хранение токенов, идентификаторов сессий и пользовательских настроек на стороне клиента позволяет:

  • Сохранять состояние между переходами в приложении.
  • Автоматически включать данные авторизации в запросы к серверу.
  • Персонализировать интерфейс без лишних запросов на сервер.

Изображение: иллюстрация рабочего стола с кодом.

Экран компьютера с логотипом React и фрагментом кода

Разница между cookies и sessionStorage — коротко

  • Cookies: хранятся в браузере и могут иметь срок жизни; могут быть отправлены автоматически при каждом HTTP‑запросе в зависимости от настроек. Подходят для сохранения между сессиями (persist across browser sessions).
  • sessionStorage: хранится только в рамках текущей вкладки/окна и удаляется при закрытии вкладки; не отправляется автоматически серверу при HTTP‑запросах.

1‑строчное определение: cookies — переносимое, контролируемое сервером хранилище; sessionStorage — временное клиентское хранилище для одной вкладки.

Установка проекта и зависимости

Настройте проект React через Vite и установите пакеты:

npm install js-cookie react-router-dom

Далее в примерах предполагается, что после успешной аутентификации бэкенд верифицирует учётные данные, а браузер сохраняет необходимые данные (токен, id сессии) в cookie или sessionStorage.

Репозиторий с кодом доступен в соответствующем GitHub‑репозитории проекта. (Ссылка в исходнике.)

Использование cookies для хранения данных аутентификации

Ниже показан минимальный пример компонента Login, который сохраняет данные в cookie с помощью библиотеки js‑cookie.

Создайте файл src/components/Login.jsx и добавьте код:

import { useState } from 'react';
import { useNavigate } from 'react-router-dom';
import Cookies from 'js-cookie';

Далее компонент формы входа:

const Login = () => {
  const [username, setUsername] = useState('');
  const [password, setPassword] = useState('');
  const navigate = useNavigate();

  const testAuthData = {
    username: 'test',
    password: 'test',
  };

  const authenticateUser = (username, password) => {
    if (username === testAuthData.username && password === testAuthData.password) {
      const userData = {
        username,
        password,
      };
      const expirationTime = new Date(new Date().getTime() + 60000); // 60 секунд (пример)
      Cookies.set('auth', JSON.stringify(userData), { expires: expirationTime });
      return true;
    }
    return false;
  };

  const handleLogin = (e) => {
    e.preventDefault();
    const isAuthenticated = authenticateUser(username, password);
    if (isAuthenticated) {
      navigate('/protected');
    } else {
      // показать ошибку или выполнить другие действия при неудачной аутентификации
      alert('Invalid credentials');
    }
  };

  return (
    
setUsername(e.target.value)} /> setPassword(e.target.value)} />
); }; export default Login;

В этом примере мы используем тестовые учётные данные. При совпадении формируем объект userData, задаём время истечения и сохраняем cookie auth.

Important: в реальном приложении не храните пароли в открытом виде ни в cookies, ни в sessionStorage. Здесь пароль используется только для демонстрации.

Роутинг и защищённая страница

Пример изменения App.jsx для маршрутизации и проверки наличия cookie auth:

import { BrowserRouter, Route, Routes, useNavigate } from 'react-router-dom';
import Cookies from 'js-cookie';
import Login from './components/Login';

const ProtectedPage = ({ ...rest }) => {
  const isAuthenticated = !!Cookies.get('auth');
  const navigate = useNavigate();
  const handleLogout = () => {
    Cookies.remove('auth');
    navigate('/login');
  };

  if (!isAuthenticated) {
    navigate('/login');
    return null;
  }

  return (
    

Hello, World!

); }; const App = () => { return ( } /> } /> ); }; export default App;

Запустите приложение:

npm run dev

Перейдите в браузере по адресу http://127.0.0.1:5173/login, введите учётные данные и проверьте создание cookie.

Изображение панели браузера с настройками cookie и хранящимися данными

Когда cookie истечёт или пользователь нажмёт кнопку выхода, cookie удаляется, а сессия завершается.

sessionStorage: когда и как использовать

sessionStorage хранит данные только в рамках текущей вкладки. Он удобен для временных, чувствительных к вкладке данных или когда нужно избежать отправки данных на сервер автоматически.

Пример записи в sessionStorage в функции authenticateUser:

sessionStorage.setItem('auth', JSON.stringify(userData));

И чтение:

const user = JSON.parse(sessionStorage.getItem('auth'));

sessionStorage полезен, когда вы хотите:

  • Изолировать сессию для каждой вкладки браузера.
  • Избежать автоматической отправки данных на сервер (в отличие от cookies).

Дополнительные сценарии использования

Cookies и sessionStorage можно использовать не только для аутентификации. Примеры:

  • Сохранение предпочтений интерфейса (тема, язык).
  • Хранение временного состояния форм и draft‑данных.
  • Отслеживание шагов мастера/онбординга в пределах сессии.

Безопасность: практические рекомендации

  1. HttpOnly и Secure
    • Для токенов аутентификации по возможности используйте HttpOnly и Secure cookies, чтобы данные были недоступны из JavaScript и передавались только по HTTPS. Библиотека js‑cookie не может создать HttpOnly cookie — это делается сервером при установке Set‑Cookie.
  2. SameSite
    • Устанавливайте атрибут SameSite (Lax или Strict) для защиты от CSRF‑атак.
  3. Минимизация данных
    • Не храните лишние личные данные в браузере. Сохраняйте минимум: идентификатор сессии или короткоживущий токен.
  4. Цифровая подпись и баланс доверия
    • Бэкенд должен проверять целостность и срок действия токена на каждой защищённой конечной точке.
  5. XSS‑защита
    • Профилактика XSS (экранирование, CSP) важна для предотвращения кражи cookie и sessionStorage.
  6. Регулярная ротация
    • Используйте короткие сроки жизни токенов и обновляйте их по защищённому каналу (refresh token, rotation).

Консервативные рекомендации по архитектуре

  • Если вы контролируете бэкенд, отдавайте предпочтение HttpOnly cookies со сроком жизни и CSRF‑защитой.
  • Если используете SPA с API на другом домене, рассмотрите JWT с хранением refresh token в HttpOnly cookie, а access token — в памяти.

Когда подход с cookies/sessionStorage не работает (ограничения и контрпримеры)

  • Пользователь отключил cookie в браузере — cookies недоступны.
  • Ограничение SameSite или CORS может помешать отправке cookie между доменами.
  • При наличии XSS у злоумышленника возможен доступ к sessionStorage и non‑HttpOnly cookies.
  • Если приложение должно масштабироваться между несколькими устройствами, персистентные cookie не заменят серверную сессию и синхронизацию между устройствами.

Альтернативные подходы

  • Token in memory: access token хранится в памяти (без persist) — безопаснее при XSS, но теряется при перезагрузке.
  • Refresh token в HttpOnly cookie + access token в памяти: сочетание безопасности и UX.
  • Серверные сессии: хранить сессии на сервере (Redis) и держать только идентификатор в cookie.
  • OAuth2/OIDC: стандартизованные потоки аутентификации для внешних провайдеров.

Чек‑лист по ролям

Разработчик:

  • Проверить, что реальные пароли не сохраняются в браузере.
  • Настроить Secure и SameSite на стороне сервера.
  • Реализовать проверку токена на бэкенде.

QA:

  • Тестировать истечение cookie и корректный редирект на страницу входа.
  • Проверять поведение при отключённых cookie.
  • Проверять, не доступны ли чувствительные данные через консоль.

Ops/SRE:

  • Настроить HTTPS, CSP и прочие заголовки безопасности.
  • Мониторить частоту ошибок авторизации.

Критерии приёмки

  • Пользователь с корректными данными входит и получает доступ к защищённой странице.
  • После перезагрузки вкладки при использовании cookie пользователь остаётся аутентифицирован (если cookie ещё действительна).
  • При нажатии Logout cookie/sessionStorage очищаются, пользователь перенаправляется на страницу входа.
  • Поведение при истечении срока cookie — корректный редирект и сообщение пользователю.

Тестовые сценарии и критерии приёмки

  • Позитивный сценарий: корректные данные — успешный логин, cookie создана.
  • Негативный сценарий: неверные данные — показывается ошибка, cookie не создаётся.
  • Сценарий истечения: cookie истекла — доступ к /protected запрещён.
  • Сценарий отключённых cookie: приложение показывает информативную ошибку и/или рекомендации.

Руководство по устранению неполадок (runbook)

Проблема: Cookie не создаётся

  • Проверить, приходят ли Set‑Cookie заголовки от сервера (если cookie ставит сервер).
  • Убедиться, что домен/путь совпадают, и что нет ограничений SameSite/CORS.

Проблема: Logout не работает

  • Проверить, удаляется ли cookie через Cookies.remove(‘auth’) или sessionStorage.clear().
  • Убедиться, что после удаления выполняется navigate(‘/login’) и компонент Protected корректно реагирует.

Проблема: Токены крадут через XSS

  • Внедрить CSP, проверить ввод и экранирование, использовать HttpOnly для refresh token.

Пример методологии внедрения (мини‑план)

  1. Выбрать стратегию хранения (HttpOnly cookie vs sessionStorage vs memory).
  2. Реализовать минимальный поток входа и выхода.
  3. Добавить серверную проверку токенов/сессий.
  4. Провести security review и тесты на XSS/CSRF.
  5. Настроить мониторинг и alerting для аутентификационных ошибок.

Краткая галерея крайних случаев

  • Мобильный браузер, агрессивная очистка данных — sessionStorage теряется;
  • Приложение в iframe с различными политиками — cookies могут блокироваться;
  • Прокси или CDN, которые модифицируют заголовки Set‑Cookie — сломают установку cookie.

Правовые и приватность: заметки по GDPR

  • Минимизируйте хранение персональных данных в браузере.
  • Убедитесь, что у вас есть юридическое основание для хранения cookie (consent), если они не являются строго необходимыми для работы сервиса.
  • Реализуйте политику удаления и сроков хранения cookie.
  • Предоставьте пользователю средства управления cookie (панель согласия).

Быстрый справочник по безопасности cookie (чек‑лист)

  • Использовать HttpOnly для чувствительных токенов (на стороне сервера).
  • Установить Secure — cookie передаётся только по HTTPS.
  • Установить SameSite=Lax/Strict для защиты от CSRF.
  • Минимизировать время жизни cookie.

Небольшой словарь терминов

  • Cookie: небольшой фрагмент данных, хранимый браузером и отсылаемый серверу согласно политике.
  • sessionStorage: локальное хранилище, живущее только в рамках вкладки браузера.
  • HttpOnly: атрибут cookie, запрещающий доступ из JavaScript.
  • SameSite: политика отправки cookie при межсайтовых запросах.

Факто‑бокс: ключевые числа (ориентиры)

  • Пример времени жизни в коде выше: 60 секунд (для демонстрации) — на практике используйте более обоснованное значение (минуты/часы).
  • Refresh token: обычно живёт дольше (часы/дни), access token — короче (минуты).

Социальная превью и краткий анонс

OG заголовок: Управление сессиями в React — cookies и sessionStorage OG описание: Как хранить данные аутентификации безопасно и удобно в React: примеры, советы по безопасности и чек‑листы.

Анонс (100–200 слов):

Использование cookies и sessionStorage — быстрый способ поддерживать сессию пользователя в React‑приложении без постоянных повторных логинов. В статье показаны практические примеры с использованием js‑cookie, разъяснения, когда стоит выбирать cookies или sessionStorage, и подробные рекомендации по безопасности: HttpOnly, Secure, SameSite, защита от XSS/CSRF. Также включены чек‑листы для разработчиков и QA, тестовые сценарии и runbook для устранения типичных проблем. Подойдёт для команд, которые внедряют аутентификацию в SPA и хотят баланс между UX и безопасностью.

FAQ

Какой способ безопаснее: cookies или sessionStorage?

Безопаснее хранить чувствительные токены в HttpOnly cookies, потому что они недоступны из JavaScript и устойчивее к XSS. sessionStorage уязвим к XSS, но предотвращает автоматическую отправку данных при HTTP‑запросах.

Можно ли хранить пароль в cookie?

Ни в коем случае не храните пароли в браузере. Храните только токены/идентификаторы сессий и минимальный объём данных.

Как защититься от CSRF?

Используйте SameSite, CSRF‑токены и проверяйте происхождение запросов на сервере.

Итог

Cookies и sessionStorage — полезные инструменты для управления сессиями в React‑приложениях. Выбор между ними зависит от требований к безопасности и UX: cookies (особенно HttpOnly) подходят для персистентных сессий и защиты от XSS, sessionStorage — для изолированного поведения в одной вкладке. Всегда сочетайте клиентские механизмы с надёжной серверной валидацией и политиками безопасности.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство