Сеанс PHP і файли cookie PHP із прикладом

⚡ Розумний підсумок

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

  • 🍪 Що таке файли cookie: Файл cookie — це невеликий файл розміром до 4 КБ, який сервер зберігає на клієнті та повертає з кожним наступним запитом.
  • 🗄️ Що таке сесії: Сеанс зберігає дані на сервері під унікальним ідентифікатором, який зберігається в масиві $_SESSION та на який посилається сеансовий cookie.
  • 🆚 Ключова відмінність: Файли cookie зберігаються на клієнті та підходять для невеликих, неконфіденційних даних; сесії зберігаються на сервері та містять більші або конфіденційні дані.
  • 🛠️ Створення файлів cookie: setcookie() встановлює ім'я, значення та, за потреби, прапорці терміну дії, шляху, домену, безпеки та httponly перед будь-яким виводом HTML.
  • ???? Створення сесій: session_start() розпочинає сеанс, після чого ви зчитуєте та записуєте значення через суперглобальний масив $_SESSION.
  • 🗑️ Очищення: Закінчити термін дії cookie, встановивши минулий час; завершити сеанс за допомогою session_destroy() або очистити одне значення за допомогою unset().
  • 🤖 AI Assist: Інструменти штучного інтелекту можуть реалізовувати безпечну обробку сесій та позначати слабкі місця файлів cookie або сесій у існуючому PHP-коді.

PHP-файли cookie та сесії

Що таке файли cookie?

Файл cookie — це невеликий файл розміром до 4 КБ, який веб-сервер зберігає на клієнтському комп’ютері.

Після встановлення файлу cookie всі наступні запити сторінок повертають назву та значення файлу cookie.

Файл cookie можна зчитати лише з домену, з якого його було видано. Наприклад, файл cookie, встановлений з використанням домену www.guru99.com, не можна зчитати з домену. career.guru99.com.

Більшість веб-сайтів в Інтернеті відображають елементи з інших доменів, наприклад рекламу. Домени, що обслуговують ці елементи, також можуть установлювати власні файли cookie. Вони відомі як сторонні файли cookie.

Файл cookie, створений користувачем, може бути видимим лише для нього. Інші користувачі не бачать його значення.

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

Якщо це так, то PHP відповідає, передаючи токен cookie в URL.

Схема, наведена нижче, ілюструє, як працюють файли cookie.

Що таке 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 обмежує доступ до файлів cookie www.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

Отримання значення файлу cookie

Примітка: відображено лише порожній масив

  • Крок 2 – перейдіть до URL http://localhost/phptuts/cookies.php

Отримання значення файлу cookie

  • Крок 3 – поверніться до першої вкладки, а потім натисніть кнопку оновлення

Отримання значення файлу cookie

Зачекайте хвилину, а потім знову натисніть кнопку оновлення. Які результати ви отримали?

Видалити куки

  • Якщо ви хочете знищити файл 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 звільняє лише окремі змінні сеансу. Інші дані залишаються недоторканими.

Поширені запитання

Файли cookie зберігають дані у невеликому файлі в браузері користувача та передаються з кожним запитом. Сесії зберігають дані на сервері та надсилають лише файли cookie з ідентифікатором сесії. Сесії безпечніші для конфіденційних або більших даних.

За замовчуванням PHP зберігає дані сеансу як файли за шляхом, встановленим session.save_path у php.ini, часто це тимчасовий системний каталог. Сайти з високою відвідуваністю часто перемикають це на базу даних, Redis або обробник Memcached.

Встановіть прапорець HttpOnly таким чином JavaСкрипт не може прочитати файл cookie, має прапорець Secure, тому він передається лише через HTTPS, та атрибут SameSite для обмеження міжсайтової надсилання. Для сеансів ідентифікатор потрібно генерувати повторно після входу в систему.

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

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

Підсумуйте цей пост за допомогою: