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
"Warning! On most operation systems flock () is implemented at the process level. When using a multithreaded server API like ISAPI you cannot rely on flock () to protect files against other PHP scripts running in parallel threads of the same server instance!"
Постранічний висновок результату
29.05.2007
Основи безпеки
29.05.2007
Відразу скажемо що PHP і Апач в цій області далеко не просунулися. Нормальна багатокористувальницька конфігурація веб-сервера повинна працювати під різними користувачами ...

 

Rambler's Top100