Видалення змінних сесії
Окрім уміння реєструвати змінні сесії (тобто робити їх глобальними впродовж всього сеансу роботи), корисно також уміти видаляти такі змінні і сесію в цілому.
Функція session_unregister(имя_переменной) видаляє глобальну змінну з поточної сесії (тобто видаляє її із списку зареєстрованих змінних). Якщо реєстрація проводилася з допомогою $_SESSION ($HTTP_SESSION_VARS для версії PHP 4.0.6 і раніших), то використовують мовну конструкцію unset(). Вона не повертає жодного значення, а просто знищує вказані змінні.
Де це може згодитися? Наприклад, для знищення даних про відвідувача (зокрема, логіна і пароля) після його відходу з секретної сторіночки. Якщо правильний логін і пароль збережуться і вікно браузеру після відвідин сайту не закрили, то будь-який інший користувач цього комп'ютера зможе прочитати закриту інформацію.
У файл secret_info.php додамо строчку для виходу на головну сторінку:
<?php
// ... php код
?>
<html>
<head>
<title>Secret info</title>
</head>
...
// тут розташовується
// секретна інформація :)
<а href="index.php">На главную</a>
</html>
У 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 і його значенням, а також ідентифікатор сесії, в другий - порожній масив і ідентифікатор сесії, в третій - порожній масив. Таким чином, видно, що після знищення сесії знищується і її ідентифікатор, і ми більше не можемо ні реєструвати змінні, ні взагалі проводити які-небудь дії з сесією.
Безпека
Взагалі кажучи, слід розуміти, що використання механізму сесій не гарантує повної безпеки системи. Для цього потрібно приймати додаткові заходи. Звернемо увагу на проблеми з безпекою, які можуть виникнути при роботі з сесіями і, зокрема, з тими програмами, що ми написали.
По-перше, небезпечно передавати туди-сюди пароль, його можуть перехопити. Крім того, ми зареєстрували його як глобальну змінну сесії, значить, він зберігся в cookies на комп'ютері-клієнтові. Це теж погано. І взагалі, паролі і логіни по-хорошому повинні зберігатися в базі даних.
Дата добавления: 2016-04-02; просмотров: 742;