Видалення змінних сесії
Видалення змінних сесії
Крім наіичок реєстрації змінних сесії (тобто робити їх глобальними протягом всього сеансу роботи), корисно також вміти видаляти такі змінні і сесію в цілому.
Функція session_unregister (ім'я_змінної) видаляє глобальну змінну з поточної сесії (тобто видаляє її з списку зареєстрованих змінних). Якщо реєстрація проводилася за допомогою $_SESSION ($HTTP_SESSION_VARS для версії PHP 4.0.6 і більш ранніх), то використовують мовну конструкцію unset (). Вона не повертає ніякого значення, а просто знищує зазначені змінні.
Увага! session_unregister застаріла! Слід використовувати unset ($_SESSION ['ім'я змінної']);
Де це може стати в нагоді? Наприклад, для знищення даних про відвідувача (зокрема, логіна і пароля) після його виходу з секретної сторінки. Якщо правильні логін і пароль збережуться і вікно браузера після відвідування сайту не закрили, то будь-який інший користувач цього комп'ютера зможе прочитати закриту інформацію.
Приклад знищення змінних сесії
У файл secret_info.php додамо рядок для виходу на головну сторінку:
<? Php
// ... php код
?>
<html>
<head> <title> Secret info </ title> </ head>
... // Тут розташовується
// Секретна інформація:)
<a href="index.php"> На головну </ a>
</ Html>
У Index.php знищимо логін і пароль, введені раніше:
Вміст файлу index.php
<?
session_start ();
session_unregister ('passwd');
// Знищуємо пароль
unset ($ _SESSION ['login']);
// Знищуємо логін
print_r ($ _SESSION);
// Виводимо глобальні змінні сесії
?>
<html>
<head> <title> My home page </ title> / head>
....// Домашня сторінка
</ Html>
Тепер, щоб потрапити на секретну сторінку, потрібно буде знову вводити логін і пароль.
Для того щоб скинути значення всіх змінних сесії, можна використовувати функцію session_unset ();
Знищити поточну сесію цілком можна командою session_destroy (); Вона не скидає значення глобальних змінних сесії і не видаляє cookies, а знищує всі дані, асоційовані з поточною сесією.
Приклад знищення сесії і глобальних змінних
<?
session_start (); // ініціюємо сесію
$test = "Змінна сесії";
$_SESSION ['Test'] = $test;
// Реєструємо змінну $test.
// Якщо register_globals = on,
// То можна використовувати
// Session_register ('test');
print_r ($ _SESSION);
// Виводимо всі глобальні змінні
echo session_id ();
// Виводимо ідентифікатор сесії
echo "<hr>";
session_unset ();
// Знищуємо всі глобальні
// Змінні сесії
print_r ($_SESSION);
echo session_id ();
echo "<hr>";
session_destroy (); // знищуємо сесію
print_r ($ _SESSION);
echo session_id ();
?>
У результаті роботи цього скрипта будуть виведені три рядки: у першому - масив з елементом test і його значенням, а також ідентифікатор сесії, у другому - порожній масив і ідентифікатор сесії, в третьому - порожній масив. Таким чином, видно, що після знищення сесії знищується і її ідентифікатор, і ми більше не можемо ні реєструвати змінні, ні взагалі проводити які-небудь дії з сесією.