Лекція 27. Суперглобальні змінні та Cookies
Простір імен (namespace) – це деяке абстрактне сховище або оточення, створене для логічного групування унікальних ідентифікаторів (тобто імен), які після визначення починають асоціюватися з цим сховищем або оточенням.
Простір імен в PHP призначений для групування логічно пов'язаних класів, інтерфейсів, функцій і констант, дозволяючи при цьому уникати конфлікту імен (тобто наявності однакових ідентифікаторів) при використанні сторонніх фрагментів коду і бібліотек або ж великих фрагментів свого коду. Крім того, простір імен дає можливість застосовувати псевдоніми або скорочення дуже довгих імен, що з одного боку покращує читабельність коду, а з іншого – спрощує завдання вирішення конфлікту імен.
Для оголошення простору імен використовується службове слово namespace, а всі ідентифікатори і код, які потрібно асоціювати з ним, поміщуються між відповідними фігурними дужками {...}.
Суперглобальні змінні
Суперглобальні змінні – це вбудовані змінні, які завжди доступні у всіх областях видимості. Варто відзначити, що суперглобальні змінні визначені як масиви.
Виділяють наступні суперглобальні змінні:
$GLOBALS – асоціативний масив, що містить посилання на всі змінні, визначені в даний момент в глобальному контексті скрипта. Імена змінних використовуються в якості індексів масиву. На відміну від всіх інших суперглобальних змінних, $GLOBALS завжди доступна в PHP.
$_SERVER – це масив, що містить інформацію, таку як заголовки, шляхи та місця розташування скриптів.
$_GET – асоціативний масив змінних, переданих скрипту через параметри URL (відомі також як рядок запиту). Зверніть увагу, що масив не тільки заповнюється для GET-запитів, а скоріше для всіх запитів з рядком запиту.
$_POST – асоціативний масив даних, переданих скрипту через HTTP методом POST при використанні application/x-www-form-urlencoded або multipart/form-data в заголовку Content-Type запиту HTTP.
$_FILES – асоціативний масив елементів, завантажених в поточний скрипт через метод HTTP POST.
$_COOKIE – асоціативний масив значень, переданих скрипту через HTTP Cookies.
$_SESSION – асоціативний масив, в якому знаходяться сесії, які доступні для поточного скрипта.
$_REQUEST – асоціативний масив, який за замовчуванням містить дані змінних $_GET, $_POST та $_COOKIE.
$_ENV – асоціативний масив значень, переданих скрипту через змінні оточення.
Ці значення імпортуються в глобальний простір імен PHP з системних змінних оточення, в якому запущений парсер PHP. Більшість значень передається з командної оболонки, під якою запущений PHP, і в різних системах, ймовірно, використовуються різні типи оболонок тому остаточний список неможливо представити.
Методи GET і POST
HTTP методи GET і POST використовуються для відправки даних на сервер. Найчастіше ці методи використовуються в HTML формах, гіперпосиланнях і AJAX запитах.
POST і GET запити можна відправити на сервер за допомогою будь-якого програмного забезпечення, що працює з протоколом HTTP.
Більшість діючих сайтів працюють з мовою програмування PHP. У цьому випадку дані, що передаються потрапляють в суперглобальні змінні $_GET і $_POST.
Масиви $_GET і $_POST є асоціативними. Таким чином, переданий на сервер параметр з ім'ям "user_name", буде доступний як $_GET['user_name'] або $_POST['user_name'] в залежності від використовуваного методу.
Основна відмінність методу GET від POST в способі передачі даних.
Запит GET передає дані через URL у вигляді пар ім'я-значення, а запит POST передає дані в тілі запиту. Ця різниця визначає властивості методів і ситуації, які підходять для використання того чи іншого HTTP методу.
Сторінка, створена методом GET, може бути відкрита повторно велику кількість разів. Така сторінка може бути кешована браузерами, проіндексована пошуковими системами і додана в закладки користувача.
Наприклад, можна використовувати метод GET в HTML формі фільтру товарів: коли потрібно, виходячи з даних введених користувачем, перенаправити його на сторінку з відфільтрованими товарами, що відповідають його вибору.
Запит, виконаний методом POST, навпаки слід використовувати у випадках, коли потрібно вносити зміни в ресурс (авторизувати, відправити форму оформлення замовлення, форму зворотного зв'язку, форму онлайн заявки). Повторний перехід по кінцевому посиланню не викличе повторну обробку запиту, тому що не буде містити переданих раніше параметрів. Метод POST має більший ступінь захисту даних, ніж GET: параметри запиту не видно користувачеві без використання спеціального програмного забезпечення, що дає методу перевагу при пересиланні конфіденційних даних, наприклад у формах авторизації.
HTTP метод POST підтримує тип кодування даних multipart/form-data, що дозволяє передавати файли.
Cookie
Cookie – невеликі обсяги даних, які використовуються браузером користувача для зберігання інформації, необхідної серверу при повторному відвідуванні користувачем сторінок сайту.
При першому відвідуванні сторінки сайту користувачем веб-сервер повертає запитувану сторінку і в разі необхідності додатково передає cookie, які передаються в складі HTTP-відповіді і являють собою текстові рядки у вигляді 'Set-Cookie: name = value'.
Якщо в браузері користувача дозволений прийом cookie, він їх запам'ятовує і далі відправляє з кожним наступним HTTP-запитом до сайту. В результаті таких маніпуляцій сервер буде розуміти, що поточний запит пов'язаний з попереднім і зможе вживати необхідних дій, наприклад, авторизувати користувача або збільшувати лічильник відвідувань сторінки.
Якщо поточний запит вже не перший, сервер може змінювати поточне значення встановлених cookie шляхом відправки нових рядків 'Set-Cookie: name = newvalue'.
Сесії
Сесія (session) – це механізм ідентифікації браузера користувача і збереження інформації між послідовними доступами до веб-сайту, який дозволяє зберігати дані про клієнта на стороні сервера.
Ідентифікація браузера (і, відповідно, користувача) здійснюється за допомогою ідентифікатора сесії (session_id), який являє собою звичайну рядкову змінну (за замовчуванням її ім'я – PHPSESSID) і присвоюється кожному відвідувачу сайту, дозволяючи серверу відрізнити одного користувача від іншого.