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

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

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

[code]<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


3358 30.11.13



Напівжирний Нахилений текст Підкреслений текст Перекреслений текст | Вирівнювання по лівому краю По центру Вирівнювання по правому краю | Вставка смайликів Вибір кольору | Прихований текст Вставка цитати Перетворити вибраний текст з транслітерації в кирилицю Вставка спойлеру