Сеанс PHP і файли cookie PHP із прикладом
⚡ Розумний підсумок
Файли cookie та сесії в PHP зберігають стан у протоколі HTTP без збереження стану, але зберігають дані по-різному. У цьому покроковому посібнику пояснюється, як файли cookie зберігають невеликі файли на клієнті, як сесії зберігають дані на сервері, а також як створювати, читати та знищувати кожен із них за допомогою робочого коду.

Що таке файли cookie?
Файл cookie — це невеликий файл розміром до 4 КБ, який веб-сервер зберігає на клієнтському комп’ютері.
Після встановлення файлу cookie всі наступні запити сторінок повертають назву та значення файлу cookie.
Файл cookie можна зчитати лише з домену, з якого його було видано. Наприклад, файл cookie, встановлений з використанням домену www.guru99.com, не можна зчитати з домену. career.guru99.com.
Більшість веб-сайтів в Інтернеті відображають елементи з інших доменів, наприклад рекламу. Домени, що обслуговують ці елементи, також можуть установлювати власні файли cookie. Вони відомі як сторонні файли cookie.
Файл cookie, створений користувачем, може бути видимим лише для нього. Інші користувачі не бачать його значення.
Більшість веббраузерів мають опції для вимкнення файлів cookie, файлів cookie третіх сторін або і тих, і інших.
Якщо це так, то PHP відповідає, передаючи токен cookie в URL.
Схема, наведена нижче, ілюструє, як працюють файли cookie.
Тут,
1) Користувач запитує сторінку, яка зберігає файли cookie
2) Сервер встановлює файл cookie на комп’ютері користувача
3) Інші запити сторінок від користувача повертатимуть назву та значення файлу cookie
Чому і коли використовувати файли cookie?
- HTTP — це протокол без збереження стану; файли cookie дозволяють нам tracстан програми за допомогою невеликих файлів, що зберігаються на комп’ютері користувача. Шлях до зберігання файлів cookie залежить від браузера. Internet Explorer зазвичай зберігає їх у папці «Тимчасові файли Інтернету».
- Персоналізація користувацького досвіду – це досягається шляхом надання користувачам можливості вибирати свої налаштування. Наступні запити сторінок персоналізуються на основі налаштувань, встановлених у файлах cookie.
- Tracking сторінки, які відвідує користувач
Створення файлів cookie
Давайте тепер розглянемо основний синтаксис, який використовується для створення файлу cookie.
<?php setcookie(cookie_name, cookie_value, [expiry_time], [cookie_path], [domain], [secure], [httponly]); ?>
ТУТ,
- «setcookie» – це функція PHP використовується для створення файлу cookie.
- «cookie_name» – це назва cookie, яку сервер використовуватиме під час отримання його значення з масиву змінної $_COOKIE. Це обов’язковий параметр.
- «cookie_value» – це значення файлу cookie, і воно є обов’язковим.
- «[expiry_time]» необов’язковий; його можна використовувати для встановлення часу закінчення терміну дії cookie, наприклад, 1 година. Час встановлюється за допомогою функції PHP time() плюс або мінус кількість секунд, більша за 0, тобто time() + 3600 для 1 години.
- «[шлях_cookie_path]» необов’язковий; його можна використовувати для встановлення шляху файлів cookie на сервері. Слеш «/» означає, що файл cookie буде доступним для всього домену. Підкаталоги обмежують доступ файлів cookie до субдомену.
- «[домен]» необов’язковий; його можна використовувати для визначення ієрархії доступу до файлів cookie, тобто
www.cookiedomain.comозначає весь домен, покиwww.sub.cookiedomain.comобмежує доступ до файлів cookiewww.sub.cookiedomain.comі його субдомени. - «[secure]» необов’язковий; значення за замовчуванням — false. Він використовується для визначення, чи файл cookie надсилається через HTTPS, якщо для нього встановлено значення true, чи HTTP, якщо для нього встановлено значення false.
- «[httponly]» необов’язковий. Якщо для нього встановлено значення true, то мови сценаріїв на стороні клієнта, такі як JavaScript не може отримати доступ до файлу cookie.
Примітка: Функцію setcookie у PHP потрібно виконати перед початковим тегом HTML.
Давайте тепер розглянемо приклад, який використовує файли cookie.
Ми створимо просту програму, яка дозволить нам зберігати ім'я користувача в cookie, термін дії якого закінчується через шістдесят секунд.
Код нижче показує реалізацію наведеного вище прикладу «cookies.php».
<?php setcookie("user_name", "Guru99", time()+ 60,'/'); // expires after 60 seconds echo 'the cookie has been set for 60 seconds'; ?>
вихід:
the cookie has been set for 60 seconds
Отримання значення файлу cookie
Створіть ще один файл під назвою «cookies_read.php» із таким кодом.
<?php
print_r($_COOKIE); // output the contents of the cookie array variable
?>
вихід:
Array ( [PHPSESSID] => h5onbf7pctbr0t68adugdp2611 [user_name] => Guru99 )
Примітка: $_COOKIE — це вбудована суперглобальна змінна PHP. Вона містить назви та значення всіх встановлених файлів cookie.
Кількість файлів cookie та їх розмір обмежені браузером, зазвичай близько 50 файлів cookie на домен та 4 КБ на файл cookie.
Тестування нашої програми. Припустимо, що ви зберегли свої PHP-файли в папці phptuts.
- Крок 1 – відкрийте веббраузер і введіть URL http://localhost/phptuts/cookies_read.php
Примітка: відображено лише порожній масив
- Крок 2 – перейдіть до URL http://localhost/phptuts/cookies.php
- Крок 3 – поверніться до першої вкладки, а потім натисніть кнопку оновлення
Зачекайте хвилину, а потім знову натисніть кнопку оновлення. Які результати ви отримали?
Видалити куки
- Якщо ви хочете знищити файл cookie до закінчення терміну дії, ви встановлюєте час закінчення терміну дії на час, який уже минув.
- Створіть новий файл з назвою cookie_destroy.php з наступним кодом
<?php setcookie("user_name", "Guru99", time() - 360,'/'); ?>
- Повторіть кроки з 1 по 3 з наведеного вище розділу про отримання значень файлів cookie.
- Відкрийте URL http://localhost/phptuts/cookie_destroy.php
- Переключитися на URL http://localhost/phptuts/cookies_read.phpЯкі результати це показує?
Що таке сесія?
- Сеанс — це глобальна змінна, яка зберігається на сервері.
- Кожному сеансу призначається унікальний ідентифікатор, який використовується для отримання збережених значень.
- Щоразу, коли створюється сеанс, на комп’ютері користувача зберігається файл cookie, що містить унікальний ідентифікатор сеансу, і він повертається з кожним запитом до сервера. Якщо браузер клієнта не підтримує файли cookie, унікальний ідентифікатор сеансу PHP відображається в URL.
- Сеанси можуть зберігати відносно великі дані порівняно з файлами cookie.
- Значення сеансу автоматично видаляються, коли браузер закривається. Якщо ви хочете постійно зберігати значення, ви повинні зберегти їх у базі даних.
- Як і змінна масиву $_COOKIE, змінні сесії зберігаються в змінній масиву $_SESSION. Так само, як файли cookie, сеанс має бути розпочато перед будь-якими тегами HTML.
Чому і коли використовувати Sessions?
- Ви хочете безпечніше зберігати важливу інформацію, таку як ідентифікатор користувача, на сервері, де зловмисники не можуть її змінити.
- Ви хочете передати значення з однієї сторінки на іншу.
- Ви хочете альтернативу файлам cookie у браузерах, які не підтримують файли cookie.
- Ви хочете зберігати глобальні змінні ефективним та безпечнішим способом порівняно з їх передачею в URL.
- Ви розвиваєтесьping додаток, такий як магазинping кошик, який має тимчасово зберігати інформацію ємністю понад 4 КБ.
Створення сесії
Щоб створити сеанс, спочатку потрібно викликати функцію PHP session_start, а потім зберегти значення в змінній масиву $_SESSION.
Припустимо, що нам потрібно знати, скільки разів завантажувалася сторінка. Для цього ми можемо використати сеанс.
Наведений нижче код показує, як створювати та отримувати значення із сеансів.
<?php session_start(); // start the session if(isset($_SESSION['page_count'])) { $_SESSION['page_count'] += 1; } else { $_SESSION['page_count'] = 1; } echo 'You are visitor number ' . $_SESSION['page_count']; ?>
вихід:
You are visitor number 1
Знищення змінних сеансу
Функція session_destroy() використовується для знищення всієї сесії PHP.
Якщо ви хочете знищити лише один елемент сеансу, ви використовуєте функцію unset().
Наведений нижче код ілюструє, як використовувати обидва методи.
<?php
session_destroy(); // destroy entire session
?>
<?php unset($_SESSION['product']); // destroy product session item ?>
session_destroy видаляє всі дані сеансу, включаючи файли cookie, пов'язані з сеансом.
Значення unset звільняє лише окремі змінні сеансу. Інші дані залишаються недоторканими.




