Що таке сесії і для чого вони потрібні? Давайте уявимо таку ситуацію: у вас є певна кількість сторінок, вхід на які ви хочете обмежити паролем. У нас є форма, в якій ми вводимо логін і пароль, на наступній сторінці ми перевіряємо ці дані на «; правильність », якщо логін і пароль правильні, то відображаємо вміст сторінки. Все б нічого, але «запаролених» сторінок у нас кілька, і логін з паролем треба перевіряти на кожній. Тут виникає необхідність передачі цих даних між сторінками. Звичайно, можна було б передавать логін і пароль методом GET (http://www.domain.org/page.php?login=xyz&pass=1123), але з кількох причин так робити не варто (всім видно пароль). А уявімо собі випадок, коли необхідно передати від скріПТА скрипт (від сторінки до сторінки) велику кількість інформації ... І тут виникає думка: «добре було б мати можливість передавати потрібні нам дані від одного скрипта до іншого при перегляді сайту без прямої передачі цих даних від сервера до переглядача і назад». Таким чином, мисамі підібрати до принципу роботи сесій.
Як влаштовані сесії? Сесії - це механізм, створений для тимчасового зберігання і передачі інформації між скриптами в межах одного сайту.
Сесії передбачають можливість створення собдержавні способів обробки інформації, тому, в принципі, можна використовувати сесії і при роботі з кількома сайтами або навіть з декількома серверами. Ці способи нами тут розглядатися не будуть, так як ці прийоми виходять за рамки стандартного програмування на РНР і вимагають від программиста глибоких знань не тільки РНР, але й знання мережевих протоколів, архітектури побудови серверів і так далі.
Сесії з точки зору програміста Щоб запустити механізм сесії в скрипті (створити сесію) необхідно скористатися функцією session_start (). Ця функція повинна стояти у вашому скрипті до того, як скрипт почне виведення інформації (навіщо - об'явимо нижче). Після створення сесії ми отримуємо доступ до суперглобальному масиву $ _SESSION, який володіє корисними властивостями. Так, поміщена в нього інформація буде доступна нам в будь-якому скріпте в будь-якої функції даного сайту протягом сеансу роботи з сайтом. Сеанс припиняється коли користувач закриє браузер або після певного часу, протягом якого користувач не здійснював переходів по сайту. Цей час визначається опцією session.gc_maxlifetime у файлі php.ini тавизначає час, по закінченні якого фото сесії буде розглядатися як застарілий.
Існує також масив $ HTTP_SESSION_VARS, яким можна користуватися при роботі з сесіями. Але цей масив не є суперглобальним, плюс ім'я його містить більше букв, а значить треба витратитибільше часу на його написання. В загальному, користуватися цим масивом я не рекомендую.
Більш пильний погляд на механізм роботи сесій Передача даних від скрипту до скрипт згідно механізму роботи сесій складається з створення файлу, запису даних у файл, відкритті файлу чтеніі даних і тд. Отже, спочатку цей механізм спирається на файли. Як уже згадувалося, при необхідності, дані сесії можна зберігати в базі даних або просто в пам'яті. Для цього необхідно скористатися функцією session_set_save_handler () і / або опцією session.save_handler у файлі php.ini Ідентифікатор сесії. При старті сесії створюється спеціальний файл, в якому зберігаються дані, передані за допомогою сесії. Для ідентифікації конкретної сесії конкретного користувача використовується так званий ідентифікатор сесії. Ідентифікатор представляє з себе 128 бітне число типу 523afa15f4a8e05e95241481c0cbc71e, що при старті сесій вибирається випадковим чином. У підсумку, ми маємо файл, в імені якого є унікальний ідентифікатор рівний ідентифікатором сесії.
Передача ідентифікатора сесії Існує два зпособ передачі ідентифікатора сесії між сервером і браузером: Куки Як параметр в URL
Використання cookies - якщо у користувачі куки включені PHP процесор сам поміщає туди змінну зі значенням ідентифікатора, і в потрібний момент читає її від туди,причому включені у клієнта куки чи ні - php визначає самостійно.
Що таке cookie? Cookie це невелика порція інформації, яку сервер передає клієнту. Клієнт (броузер) буде зберігати цю інформацію і передавати її сервера з кожним запросо як частина HTTP заголовка. Деякі cookie зберігаються тільки протягом однієї сесії, вони віддаляються після закриття броузера. Інші, які встановлені на деякий період часу, дані записуються в файл. Зазвичай цей файл називається 'cookie.txt'.
Використання параметров - цей метод використовується PHP якщо куки відключені. Суть методу в тому, що PHP процесор аналізує весь код, призначений для відображення в браузері, і виробляє автозамену всіх посилань таким чином, щоб ідентифікатор сесії міг передати на наступну сторінку Посередством методу GET або POST.
Приклади автозамени:
Код до обробки php-процесором:
<a href=page.php> link </ a>
Код після обробки php-процесором:
<a href=page.php?PHPSESSID=523afa15f4a8e05e95241481c0cbc71e> link </ a>
Код до обробки форми php-процесором:
<form action = page.php> </ form>
Код після обробки форми php-процесором:
<form action=page.php> <input type = "hidden" name = "PHPSESSID" value = "523afa15f4a8e05e95241481c0cbc71e "> </ form>
Висновки Отже, підіб'ємо підсумок сказаного вище. У нас є дані, які необхідно використовувати на декількох сторінках; для кожного клієнта під зберігання цих даних виділяется простір пам'яті з унікальним ідентифікатором; PHP передає цей ідентифікатор від скрипту до скрипти, тим самим, відкриваючи доступ до виділеному для поточного клієнта дільниці пам'яті. Всі ці дії виконуються PHP-процесором автоматично, а от програміста потрібно всього лише дати командуна запуск сесій. На прикладі всього цього ми бачимо, що сесії - це дуже зручний і гнучкий механізм для ідентифікації клієнтських запитів.
Часто використовувані параметри та функції для сесій
session_start (); - запускає хутроанізм сесій для поточного скрипту.
Попередження: Якщо Ви хочете, щоб ваш сценарій працював незалежно від register_globals, Вам потрібно використовувати масив $ _SESSION тому що дані які знаходяться у цьому масиві автоматично реєструються. Якщо ва ш сценарій використовує session_register (), він не буде працювати в середовищах де директива PHP register_globals вимкнена.
Рекомендується використовувати таку конструкцію для реєстрації змінних в сесії
"> $ _SESSION [ 'Name'] = "Василь";
session_destroy (); - знищуються дані, що зберігаються у сесії, сам файл сесії і його ідентифікатор.
session_name (); - ця функція повертає назву змінної,яка використовується для зберігання ідентифікатора сесії.
session_id (); - сам ідентифікатор сесії.
session.name - параметр в php.ini устанавливающий ім'я змінної для зберігання ідентифікатора сесії, за замовчуванням значення - PHPSESSID.
session.auto_start - параметр вмикати / вимикати автоматичний старт сесій. Якщо значення цього параметра - 1, то сесії стартують автоматично і використовувати session_start (), не треба, якщо значення параметра - 0, то сесії не будуть стартуватиавтоматично. За замовчуванням значення 0.
session.use_cookies - параметр вказує PHP процесору використовувати чи куки для зберігання ідентифікатора чи ні. За замовчуванням PHP-процесору дозволено використовувати cookies для зберігання ідентифікатора сесії, і значення це го параметра дорівнює 1.
Інші параметри та функції для роботи з сесіями використовуються порівняно рідко, і тому я не стану приводити їх опис в цій статті. Але якщо у вас все-таки є бажання, то ви завжди можете ознайомитися з ними тут:ession.php "target =" _blank "> http://ua.php.net/manual/ru/ref.session.php
Приклад використання сесій Зараз я на простому прикладі продемонструю як зберігаються і передаються дані за допомогою механізму сесій.
index.php
<form action=page1.php method="GET"> Введіть ваше ім'я <input type=text name=login> <input type=submit> </ form>
rong> page1.php
<? php / / увага! До <? php не повинно бути пробілів або порожніх рядків > session_start (); / / Включаємо підтримку сесій і генеріруем випадковий / / Ідентифікатор сесії
$ _SESSION [ 'Login'] = "root"; / / Реєструємо змінну $ login як змінну сесії.
= "# 007700"> print "На попередній сторінці ви ввели ім'я <b> $ _GET [ 'login'] </ b>. Ваше ім'я вже зберігається у файлі сесії. <br /> Перейдіть за посиланнямна наступну сторінку <p>
<a href="page2.php"> Посилання на наступну сторінку </ a> "; / / Робимо посилання для переходу на наступну стр аніцу / / У цю посилання за допомогою механізму автозамени / / Буде підставлено ідентифікатор сесії ?>
page2.php
rce "> <? php / / увага! До <? php не повинно бути пробілів або порожніх рядків session_start (); > / / Знову включаємо підтримку сесій
print "Ваше ім'я, передане за допомогою механізму сесій: <b> $ _SESSION [ 'login'] </b> "; / / Виводимо вміст змінної $ login / / Яка зберігається у файлі сесій ?>
На цьому я заканчіваю свою статтю, і бажаю вам успіхів у подальшому вивченні PHP! |