Добро пожаловать на сайт SEDBY

Куки, сессия и локальное хранилище: особенности, преимущества и недостатки

  • 313 просмотров +1
  • 9 декабря, 2025
  • Обновлено: 13 декабря, 2025
  • admin
  • Время чтения: 4 минуты
  • 1 (Подробно)
Куки, сессия и локальное хранилище: особенности, преимущества и недостатки

Cookie, Session и Local Storage составляют базовый треугольник инструментов для хранения и использования пользовательских данных. Ни один из них не является универсальным или удовлетворяющим всем возможным требованиям разработчика. Тем не менее, у каждого есть свои принципиальные особенности, рациональное использование которых решит все ваши задачи.

Куки / Cookie

Кукис или “печенки” представляют собой небольшие по размеру (порядка 4Кб) объекты, хранящиеся на стороне клиента. Срок их хранения технически ограничен: использовать куки можно в рамках сессии или в соответствии с указанным разработчиком сроком хранения. Однако практически можно указать довольно продолжительный срок и продлевать его по мере необходимости, фактически сохраняя их бесконечно – если клиент не решит очистить данные своего браузера.

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

Cookie отправляются с каждым HTTP-запросом на удаленный сервер и доступны разработчику с виде массива $_COOKIE. Создание и получение кукиз возможно нативно с помощью PHP и JavaScript или посредством предустановленной jQuery-библиотеки.

$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value);
// ...
echo $_COOKIE[$cookie_name];

JavaScript обеспечивает простую запись кукиз. При этом получение возможно только всего массива, отдельные данных из которого можно вычленить с помощью пользовательской функции.

document.cookie = "CMS=Cotonti Siena";

Куки вполне безопасны, особенно при условии использования флажка httponly для защиты от XSS. Кросс-доменный обмен кукиз возможен, однако при строгом соблюдении необходимых условий. Самый простой и доступный вариант касается их совместного использования между поддоменами.

Локальное хранилище / Local Storage

По сравнению с Cookies, локальное хранилище значительно более объемное и обеспечивает до 5Мб пространства для хранения данных пользователя для каждого отдельного домена. При этом срок хранения не ограничен: удаление возможно только с помощью скрипта или через очистку пользовательских данных браузера.

Поскольку данные Local Storage хранятся на стороне клиента, доступ к ним возможен только через скрипт. В отличие от кукиз, для разработчика здесь все просто:

// Создаем
localStorage.setItem('bookmarks', '[]');
// Читаем
bookmarks = localStorage.getItem('bookmarks');
// Удаляем
localStorage.removeItem('bookmarks');

Т. е. можно “адресно” записывать, получать и удалять любые записи в локальном хранилище. Поскольку данные не передаются с http-запросами, взаимодействие с сервером возможно с помощью AJAX. Данные доступны исключительно для одного источника (same origin policy).

Сессия / Session

Данные в сессионном хранилище сохраняются только в пределах сессии. Стартует сессия с помощью функции

session_start();

Когда пользователь закрывает вкладку или браузер, сессия прерывается согласно следующему алгоритму:

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

Завершение сессии также происходит по таймауту, т. е. при определенном сроке бездействия (отсутствия активности) пользователя на сайте.

Хранение и обмен пользовательскими данными в сессии обеспечивается с помощью массива $_SESSION. В нем, в виде элементов массива, можно хранить любые пользовательские данные. 

$_SESSION[‘some_userdata’] = ‘Some user data’;

С сессией можно работать и через Javascript:

sessionStorage.setItem("CMS", "Cotonti Siena");

Размер ограничен квотой сервера на хранение файлов сессий, указываемой в файле php.ini опцией memory_limit.

Завершается сессия просто:

session_unset();
// ... ну или:
$_SESSION = [];

Сравнение и заключение

Сравним три вида хранилищ в сводной таблице:

  Куки Локальное хранилище Сессия
Объем хранилища ~4Kb на одну запись ~10Mb на домен ограничено квотой сервера
Срок хранения устанавливается разработчиком без ограничения ограничено сроком действия сессии
Получение с http-запросом да, массив $_COOKIE нет да, массив $_SESSION
Доступность на стороне клиента и на стороне сервера
JavaScript + PHP
только на стороне клиента
Javascript
только на стороне сервера
Javascript + PHP
Пример использования авторизация пользователей хранение некритических данных (закладки, настройки сайта) хранение данных корзины

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

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

В прошлый раз мы разбирали особенности использования библиотеки Select2 из дистрибутива Cotonti Siena.


Комментарии:
Комментарии отсутствуют

Новый комментарий

Ваш комментарий будет доступен для редактирования 10 минут
Блок пользователя
Регистрация на нашем сайте позволит вам общаться на форумах и получить доступ к другому полезному функционалу
Вы вошли как Гость