Ноу Інти, лекція, авторизація доступу за допомогою сесій

Робота з сесіями

створення сесії

Перше, що потрібно зробити для роботи з сесіями (якщо вони вже налаштовані адміністратором сервера), це запустити механізм сесій. Якщо в налаштуваннях сервера змінна session.auto_start встановлена ​​в значення "0" (якщо session.auto_start = 1. То сесії запускаються автоматично), то будь-який скрипт, в якому потрібно використовувати дані сесії. повинен починатися з команди

Отримавши таку команду, сервер створює нову сесію або відновлює поточну, грунтуючись на ідентифікатор сесії. переданому за запитом. Як це робиться? Інтерпретатор PHP шукає змінну, в якій зберігається ідентифікатор сесії (за замовчуванням це PHPSESSID) спочатку в cookies. потім в змінних, переданих за допомогою POST- і GET-запитів. Якщо ідентифікатор знайдений, то користувач вважається ідентифікованим, проводиться заміна всіх URL і виставляння cookies. В іншому випадку користувач вважається новим, для нього генерується новий унікальний ідентифікатор, потім проводиться заміна URL і виставляння cookies.

Команду session_start () потрібно викликати у всіх скриптах, в яких має бути використовувати змінні сесії. причому до виведення будь-яких даних в браузер. Це пов'язано з тим, що cookies виставляються тільки до виведення інформації на екран.

Отримати ідентифікатор поточної сесії можна за допомогою функції session_id ().

Для наочності сесії можна задати ім'я за допомогою функції session_name ([імя_сессіі]). Робити це потрібно ще до ініціалізації сесії. Отримати ім'я поточної сесії можна за допомогою цієї ж функції, викликаної без параметрів: session_name ();

Приклад 12.2. створення сесії

Перейменуємо наш файл index.html, щоб оброблялися php-скрипти. наприклад в Index.php, створимо сесію і подивимося, якою вона отримає ідентифікатор і ім'я.

Приклад 12.2. створення сесії

Якщо виконати те ж саме з файлом authorize.php, то значення виводяться змінних (id сесії і її ім'я) будуть такими ж, якщо перейти на нього з index.php і не закривати перед цим вікно браузера (тоді ідентифікатор сесії зміниться).

Реєстрація змінних сесії

Однак від самих ідентифікатора та імені сесії нам користі для вирішення наших завдань небагато. Ми ж хочемо передавати і зберігати протягом сесії наші власні змінні (наприклад, логін і пароль). Для того щоб цього домогтися, потрібно просто зареєструвати свої змінні:

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

Зареєструвати змінну також можна, просто записавши її значення в асоціативний масив $ _SESSION. тобто написавши

У цьому масиві зберігаються всі зареєстровані (тобто глобальні) змінні сесії.

Доступ до таких змінних здійснюється за допомогою масиву $ _SESSION [ 'ім'я_змінної'] (або $ HTTP_SESSION_VARS [ 'ім'я_змінної'] для версії PHP 4.0.6 і більш ранніх). Якщо ж в налаштуваннях php включена опція register_globals. то до сесійним змінним можна звертатися ще і як до звичайних змінних, наприклад так: $ ім'я_змінної.

Якщо register_globals = off (відключені), то користуватися session_register () для реєстрації змінних, переданих методами POST або GET, не можна, тобто це просто не працює. І взагалі, не рекомендується одночасно використовувати обидва методи реєстрації змінних. $ _SESSION і session_register (). (Починаючи з версії PHP 5.3.0 не рекомендується для реєстрації змінних сесії використовувати функцію session_register (); більш того, починаючи з версії PHP 6.0.0, ця функція стане недоступна. Замість цього, для реєстрації змінних сесії рекомендується користуватися масивом $ _SESSION.)

Приклад 12.3. Реєстрація змінних

Лістинг 12.3a. authorize.php

Тепер, потрапивши на сторінку secret_info.php. та й на будь-яку іншу сторінку сайту, ми зможемо працювати з введеними користувачем логіном і паролем, які будуть зберігатися в масиві $ _SESSION. Таким чином, якщо змінити код секретної сторінки (зауважте, ми перейменували її в secret_info.php) так:

Лістинг 12.3b. secret_info.php

То ми отримаємо в браузері на секретній сторінці наступне:

В результаті отримаємо список змінних. зареєстрованих на authorize.php і, власне, саму секретну сторінку.

Лістинг 12.3c. 2-я версія secret_info.php