Сесії в PHP h2>
Сесія
- Це час, протягом якого відвідувач знаходиться на сайті. Часто виникає
потреба в тому, що б на протязі сеансу користувача супроводжували
деякі змінні. Можна записати ці змінні в cookie, але якщо
змінних багато, то цей спосіб не дуже зручний. Набагато ефективніше в такий
ситуації є використання сеансових змінних. Про це і піде мова в
цієї статті. p>
Механізм роботи сесій h2>
Напевно
вам цікавий механізм роботи сесій. Ну що ж, я розповім. Приміром при вході
на сайт користувачеві надається випадковий ідентифікатор - SID. Він
зберігається на комп'ютері користувача в cookie c ім'ям PHPSESSID. Взагалі це
ім'я виставляється у файлі php.ini, але мова зараз не про це. Якщо ж у браузері
відвідувача вимкнено отримання cookie, то цей ідентифікатор із значенням чіпляється
до всіх url протягом сесії. Під час створення сесії на сервері створюється
файл, ім'я якого збігається з PHPSESSID. У цьому файлі містяться всі сеансові
змінні. Однак сеансові змінні так само можуть бути збережені і в базі
даних - все залежить від конфігурації PHP. За замовчуванням ці змінні
зберігаються у файлі в тій дірректоріі, в якій лежить скрипт, який створив сеанс.
При зверненні до сеансовий змінної сервер відкриває (або робить запит до бази
даних) сеансовий файл і шукає там значення потрібної змінної. p>
Створення сесії h2>
Сесія
створюється за допомогою функції session_start (). Коли Ви робите вона перевіряє,
чи існує вже створена сесія. Якщо ні, то вона створює сесію. Синтаксис
функції: p>
boolean
session_start (); p>
При
створення сеансу функція спочатку присвоює користувачеві SID, відправляє cookie
і створює файл з сеансовий змінними. Дуже легко і зручно. P>
Знищення сесії h2>
Якщо
вам з якихось причин закортіло знищити сесію, то скористайтеся
функцією session_destroy (). Синтаксис функції: p>
boolean
session_destroy (); p>
Ця
функція знищує сеансові змінні і сеансовий файл (якщо ці змінні
були в ньому). Зверніть увагу, що ця функція не знищує cookie з SID на
ком'ютера відвідувача. p>
Створення сеансових змінних h2>
Ну
а тепер про те, заради чого взагалі замислювалася технологія сесій - про створення
сеансових змінних. Цим займається функція session_register (). Синтаксис функції: p>
boolean session_register (mixed name
[, Mixed ...]); p>
Слід
помітити, що ця функція лише створює сеансові змінні, і нічого більше.
Прісвайвать значення їм доведеться самостійно. Робиться це як у випадку з
звичайними змінними. До того ж ця функція неявно викликає
session_start (). Втім з такого прикладу буде все ясно. p>
Як дізнатися, чи була зареєстрована мінлива h2>
Це
можна дізнатися за допомогою функції session_is_registered (). Синтаксис функції: p>
booleansession_is_registered (string
name); p>
Перший
приклад p>
Тепер
ви знаєте достатньо, що б користуватися сеансовий змінними. На основі
отриманих знань можна реалізувати, наприклад, найпростіший лічильник відвідувань.
Він буде рахувати скільки сторінок переглянув користувач за один сеанс. P>
php p>
session_start ();
//створюємо сесію p>
// якщо
мінлива page_hits не була зареєстрована p>
// то
реєструємо її та присвоюємо початкове значення p>
if
(! session_is_registered ( 'page_hits')) ( p>
session_register ( 'page_hits'); p>
$ page_hits = 0; p>
) p>
$ page_hits ++; p>
echo
"Ви проглянули вже $ page_hits сторінок"; p>
?> p>
Такий
код можна розмістити на будь-якій сторінці вашого сайту. p>
Знищення
сеансових змінних p>
Сеансовий
змінні знищуються функцією session_unregister () з таким же успіхом, як і
створюються. Синтаксис функції: p>
boolean session_unregister (string
name); p>
Це
може бути корисним у тому випадку, якщо вам не потрібна більше сеансовий мінлива
і ви хочете використовувати її як звичайну змінну. p>
переглянути/Отримання
SID p>
Отримати
або змінити поточний сеансовий ідентифікатор легко. Досить скористатися
функцією session_id (). Синтаксис функції: p>
string
session_id ([string sid ]); p>
Якщо
був переданий параметр sid, то сеансовий ідентифікатор змінюється. В іншому
випадку функція просто повертає SID. p>
Збереження
та відновлення сеансових змінних p>
В
PHP збереження та відновлення сеансових змінних зведено до використання
функцій session_encode () і session_decode (). Це дуже зручно, оскільки
функція session_encode () формує рядок яку можна де не будь зберегти і
надалі розшифрувати функцією session_decode (). Цей рядок дуже зручно
зберігати в базі даних, оскільки не потрібно створювати окремі поля та й обьем
скрипта зменшується. Отже, синтаксис цих фукнцій: p>
boolean session_encode (); p>
string session_decode (string data); p>
З
першою функцією більш менш зрозуміло. А другий функції необхідно передати
зашифровану функцією session_encode () рядок. Без прикладу сприймається не
дуже легко. Давайте розглянемо простенький приклад. P>
Припустимо,
що сесія вже розпочато і в змінній $ u_id зберігається код користувача. p>
... p>
// де
то в скрипті p>
$ id
= Session_id ($ u_id); p>
// підключаємося
до бази p>
mysql_pconnect ( "localhost",
"root", "") or die ( "Не можу підключитися до
базі "); p>
mysql_select_db ( "mysite");
//вибираємо базу p>
// тут
вибирається поле зі збереженою рядком сеансових змінних p>
$ query = "SELECT s_data FROM
saved_users_data WHERE uid = '$ id'"; p>
$ result = mysql_query ($ query) or
die ( "Query '$ query' failed "); p>
$ user_s_data = mysql_result ($ result,
0, 's_data'); p>
// тепер
наша стркоа зберігається в змінній $ user_s_data p>
session_decode ($ user_s_data); p>
// припустимо,
що серед збережених сеансових змінних p>
// була мінлива
$ my_str p>
echo $ my_str; p>
// буде
виведений рядок, що була збережена в попередньому сеансі p>
... p>
?> p>
Список літератури h2>
Для
підготовки даної роботи були використані матеріали з сайту http://www.soch.imperium.by
p>