Видалення змінних сесії

Видалення змінних сесії

Крім наіичок реєстрації змінних сесії (тобто робити їх глобальними протягом всього сеансу роботи), корисно також вміти видаляти такі змінні і сесію в цілому.

Функція 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 і його значенням, а також ідентифікатор сесії, у другому - порожній масив і ідентифікатор сесії, в третьому - порожній масив. Таким чином, видно, що після знищення сесії знищується і її ідентифікатор, і ми більше не можемо ні реєструвати змінні, ні взагалі проводити які-небудь дії з сесією.