Когда использовать $_SESSION и когда $_COOKIE

13-08-2010

Важнейшей особенностью веб-программирования является возможность беспрепятственно передавать данные от одной страницы другой. Чаще всего используется при работе с регистрацией, формами входа а также предания сообщений об ошибках и т.д.
Хранение данных которые передаются от одной страницы в другую в PHP осуществляются благодаря двум глобальным переменным $_SESSION и $_COOKIE. Цель данной статьи дать краткий обзор различий между $_COOKIE и $_SESSION когда что лучше использовать, плюсы и минусы.
Разница между куки и сессиями то как они хранят данные. Куки хранятся локально на компьютере пользователя тогда как сессии хранятся на сервере у вас.

Сессии

Сессии хранят временные данные о пользователях, и они особенно полезны, если вы не хотите, чтобы были доступны за пределами сервера. Это альтернатива использованию cookie, если пользователь отключил cookie на своем компьютере, поскольку PHP может автоматически переписать URL так, чтобы передать идентификатор сессии.

Плюсы

1. Может легко хранить большое количество данных
2. Сохранять трафик, передовая только ссылки на сессии
3. Данные хранятся на сервере. Это дает сессии безопасными, потому что данные не могут быть просмотрены или отредактированы клиентом

Минусы

1. Сессии заканчиваются при закрытии браузера, но вы можете настроить в php.ini на какое время хранить сессии. Можно настроить на вечное хранение.

Недвижимость на тенерифе

Куки

Куки отправляются на сервер при каждой загрузке страницы. PHP считывает и сохраняет данные в супер глобальную переменную $_COOKIE. После этого вы можете вызывать их где угодно в любом месте.

Плюсы

1. Хранятся столько сколько потребуется даже после закрытия браузера
2. Удобно для функции запомнить меня
3. Удобно для хранения временных настроек. Например если пользователь просматривает нумерованный список элементов отсортированных определенным образом, настройки сортировки могут быть сохранены в куки.

Минусы

1. Данные хранятся на машине пользователя. Это означает, что пользователь может изменить их, посмотреть
2. Можно хранить только ограниченное количество данных.

Cookie в действии

Создание cookie

Cookie создаются вызовом функции setcookie(), сервер добавляет соответствующую строку в заголовок. Если вы попытаетесь послать cookie после того, как начнете посылать HTML, PHP отметит наличие серьезных ошибок, а cookie не будет размещен. Функция setcookie() принимает три основных параметра имя cookie, значение и дату окончания срока действия. Например:

setcookie("Ordering",$_POST['ChangeOrdering'], time()+31536000);

Использование Cookie

 echo (isset($_COOKIE['ordering'])) ? $_COOKIE['ordering'] : 'cookie value not set';

Удаление cookie

setcookie('favorite_color');

Установка cookie без значения все равно что его удаление. Это не удалит файл с машины пользователя. Чтобы удалить файл вам нужно поставить значение cookie в прошлом времени и браузер удалит файл.

Сессии в действии

Создание сессии

session_start();

Эта функция должна вызываться где то в начале вашего кода до любого вывода. Когда вы вызываете эту функцию, PHP проверяет поставлены ли у пользователя куки сессии. Если да то он загружает их в супер глобальную переменную $_SESSION. А если нет то PHP создаст на сервере новый файл сессий и посылает ид сессии обратно клиенту.

Установка значения

$_SESSION['first_name'] = 'Brian';

Считывание значения

echo $_SESSION['first_name'];

Удаление значения

unset($_SESSION['first_name']);

Завершение сессии

session_destroy();
Noisy Wizard8.14.2010 07:08
Сессии: "Данные хранятся на сервере. Это дает сессии безопасными, потому что данные не могут быть просмотрены или отредактированы клиентом" Это бред. Сессии частично хранятся на сервере, частично в Cookie. Использовать Cookie вообще не имеет ни малейшего смысла "для хранения временных настроек", т.к. нет никакой гарантии, что они у пользователя включены. PHP при использовании сессии сам запишет данные в куки, если они включены. Т.о. ответа на вопрос топика нет, потому что нет и вопроса, Cookie можно использовать разве что для упомянутой фишки "запомнить меня".
    Dexel3.31.2013 04:03
    Насчёт отключения куков. Если юзер - простой смертный, то он вообще не знает что такое куки. По дефолту во всех браузерах они включены. И как отключить их и зачем - он тоже не знает. А если он их отключил - то нашел где отключить. И знал зачем это делает. Чем сулит - тоже знал. А если отключил и не понял что сделал, то под идиотов подстраиваться не будем. Полазить по инету с отключенными куками - восемь из десяти может и будут работать в плане авторизации...
      Dexel3.31.2013 04:03
      Извиняюсь, на восьми из десяти не будет авторизация работать хотел сказать.
admin8.14.2010 06:08
кто спорит=))) , а ты попробуй с отключенными куки с сессиями поработать))
Mak8.16.2010 09:08
Честно говоря только сессии и использую. редко когда к помощи кук приходится прибегать.
    admin8.16.2010 01:08
    ну да.. они только для функции "запомнить меня" нужны вообщем то..
vitalik8.17.2010 09:08
Статья познавательная. Прочитал с удовольствием. Спасибо
Дмитрий11.1.2010 07:11
А для интернет-магазинов куки я бы сказал тоже пригождаются...
Ray1.12.2011 08:01
А вы посмотрите популярные фреймворки. Они используют куки для хранения сессий. Статья полезна разве что только начинающим.
    admin1.12.2011 09:01
    ну вообще при использовании сессий куки всегда используются, там идентификатор сессии хранится. А так в куках не рекомендуется важную информацию хранить, из соображений безопасности, но если нужно сделать такую функцию как остаться на сайте, тут без вариантов надо куки использовать
St3.6.2012 07:03
Спасибо. Начинающим и правда полезно.
Gary4.11.2012 09:04
HTML5: localStorage sessionStorage
    Павел12.15.2013 07:12
    +1. Тоже использую. Хорошая альтернатива рассматриваемым в статье глобальным переменным. У localStorage есть даже преимущество на кукисами = он хранит данные 'вечно', чего кукисы предоставить не могут.
ОСТАВИТЬ КОММЕНТАРИЙ