Що використовувати session проти cookie - блог Іллі жітенёва

Найважливішою особливістю веб-програмування є можливість безперешкодно передавати дані від однієї сторінки до іншої. Найчастіше цією можливістю користуються для передачі логінів користувачів, повідомлень про помилку, вмісту «візків» в інтернет-магазинах і т.д.

Що «зберегти» дані на сторінці, необхідно використовувати такі глобальні змінних: $ _COOKIE або $ _SESSION. Однак, не дивлячись на те, що в підсумку ви досягнете одну і ту ж мету, ці змінні необхідно використовувати тільки в певних випадках. Метою даної статті я ставлю завдання - дати короткий огляд відмінностей Session (далі «сесії») і Cookie (далі «печеньки». Не треба говорити що я перекладав промт, мені просто дійсно подобатися називати їх «печеньки»), розповісти, коли треба використовувати одне, а коли інше, а також розповісти про їх «плюсах» і «мінуси».

Їх різниця полягає лише в способі зберігання даних: печеньки зберігають дані в браузері користувача, а Сесії на стороні сервера.

Основи сесій (коротко)

У двох словах, сесії - це механізм, який дозволяє однозначно ідентифікувати клієнт (браузер) користувача і створений для цього клієнта файл на стороні сервера, в якому будуть зберігатися необхідні дані.

  1. Сесії припиняють своє життя при закритті браузера або по закінченню деякого кількості часу. Однак, термін життя сесії можна змінити використовуючи файл настройок - php.ini. Там же, ви можете зробити сесії вічними.

Основи «печенек»

«Печеньки» відправляються на сервер кожен раз, коли ви завантажуєте сторінку. Після створення «печеньки» їй задається термін життя. По закінченню цього терміну - «печеньки» припиняє своє існування.

  1. «Печенька» може існувати настільки довго, наскільки це необхідно сайту. Вона буде існувати навіть в тому випадку, якщо ви закриєте і знову отруюються браузер.
  2. Дозволяють використовувати форми аля «входити автоматично».
  3. Можна зберігати тимчасову інформацію, різні призначені для користувача настройки, наприклад, якщо користувач переглядає список відсортований особливому чином, то можна запам'ятати тип сортування і використовувати його автоматично для всіх списків, що переглядаються цим користувачем.

Використання печенек на практиці

Визначення функції: bool setcookie (string name [, string value [, int expire [, string path [, string domain [, int secure]]]]])

Створення порожній печеньки рівносильно її видалення, але, звичайно, ця дія не призведе до видалення файлу з комп'ютера користувача. Однак, ви можете встановити термін життя печеньки, по закінченню якого файл з інформацією буде стертий з призначеного для користувача комп'ютера.

Використання сесій на практиці

Цей код повинен знаходитися у верхній частині коду, перед ним не повинно бути зроблено жодного виводу (echo, print і т.д.). Ця функція перевіряє, чи відправив призначений для користувача браузер печеньки чи ні. Якщо вони відправлені, то він завантажить дані з сесії, а якщо немає, то створить новий файл сесії на сервері.

Прочитуємо значення сесії

Видаляємо (очищаємо значення) сесію

Знищуємо сесію сесію

короткий висновок

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

Доповнення від Artem:

Та й в cookie зберігати потрібно тільки приватні настройки кожного клієнта або інфу, яка може бути втрачена після закриття браузера, або інфу, яка може знадобитися при переході на інший сервер.

Взагалі ж краще всього використовувати клієнтські способи зберігання стану + зберігати стану в базі даних і в крайньому випадку (як паролі) зберігати що-небудь на сервері, чи то пак в сесії. Інакше сервер просто не витримає навантаження.

ще одна відмінність не вказано:
сесія виділяється користувачу і при доступі на сайт 1000+ користувачів в сесії зберігати не настільки важливі дані (типу кошики з покупками) просто не можна. Пам'яті сервака не вистачить.

У той же час, куки, як було сказано, вимагають трафіку. Але трафік більш доступний, ніж обмеження сервера під навантаженням.

І пофіг на клієнтів з повільним инетом, це їхні проблеми. І якщо під них підлаштовуватися, то вони ні коли не будуть паритися про те, що їм пора міняти провайдера.

Та й в cookie зберігати потрібно тільки приватні настройки кожного клієнта або інфу, яка може бути втрачена після закриття браузера, або інфу, яка може знадобитися при переході на інший сервер.

Взагалі ж краще всього використовувати клієнтські способи зберігання стану + зберігати стану в базі даних і в крайньому випадку (як паролі) зберігати що-небудь на сервері, чи то пак в сесії. Інакше сервер просто не витримає навантаження.