ru en uk

  авторизація

(044) 362 48 16   (098) 294 41 60


   Ціни

Що таке сесії і для чого вони потрібні?


Давайте уявимо таку ситуацію: у вас є певна кількість сторінок, вхід на які ви хочете обмежити паролем. У нас є форма, в якій ми вводимо логін і пароль, на наступній сторінці ми перевіряємо ці дані на «; правильність », якщо логін і пароль правильні, то відображаємо вміст сторінки.
Все б нічого, але «запаролених» сторінок у нас кілька, і логін з паролем треба перевіряти на кожній. Тут виникає необхідність передачі цих даних між сторінками. Звичайно, можна було б передавать логін і пароль методом 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.p
hp>
</ form>



Код після обробки форми php-процесором:


<form action=page.php>
<input type = "hidden" name = "PHPSESSID" value = "523af
a15f4a8e05e95241481c0cbc71e ">
</ 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!


 
Основи безпеки
29.05.2007
Блокування файлів
29.05.2007
Основи безпеки
29.05.2007