Куки, сессия и локальное хранилище: особенности, преимущества и недостатки
Популярные запросы: Open Graph, плагин Reading Time, тема Quebec, плагин Telegram, набор иконок Analogue
- 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.
Новый комментарий
Ошибка
Выполнено