#11 php Выход (logout): session_destroy и очистка сессии, как разлогинить пользователя
Primary tabs
В уроке про авторизацию мы научились впускать посетителя. Финальный штрих — уметь его «выпускать»: добавим на закрытую страницу ссылку «Выйти» и сделаем отдельный logout.php, который уничтожит сессию.
Немного теории
Сессии мы разобрали в заметке учебника и в практическом уроке про них. Для выхода нужны две вещи: очистить массив $_SESSION и вызвать session_destroy() — она удаляет данные сессии с сервера.
Код
Вся страница logout.php целиком — снова «скрипт без интерфейса», как обработчик из урока про форму и обработчик:
<?php
// logout.php - завершаем сессию и возвращаем на вход
session_start();
$_SESSION = [];
session_destroy();
header('Location: login.php');
exit;
А на закрытой странице появляется одна строка — обычная ссылка:
<p>Здесь мог бы быть ваш личный кабинет.</p> <p><a href="logout.php">Выйти</a></p> </body> </html>
Разберём logout.php построчно:
session_start()— как всегда в начале, ведь сессию сначала надо «открыть», чтобы с ней работать;$_SESSION = []— очищаем массив в текущем скрипте;session_destroy()— удаляет данные сессии на сервере: после этого кукаPHPSESSIDуказывает в пустоту;- знакомый редирект на страницу входа.
Что произошло на самом деле
Клик по «Выйти» — обычный GET-запрос к logout.php. Сервер уничтожил сессию, и теперь «страж» из урока про авторизацию на любой закрытой странице не найдёт в сессии метку вошедшего — и отправит на форму входа. Заметьте: кука PHPSESSID в браузере при этом может остаться — но она больше ничего не «помнит», и это не страшно.
Проверяем
- войдите как
admin/12345(http://localhost:19791/lessons/lesson11-logout/login.php); - на закрытой странице нажмите «Выйти» — окажетесь на форме входа;
- попробуйте открыть
secret.phpнапрямую или нажать «назад» в браузере — не пустит: сессии больше нет.
Попробуйте сами
- после выхода показывайте на странице входа сообщение «Вы вышли» (подсказка: GET-параметр при редиректе — приём уже знакомый);
- посмотрите в DevTools, что кука
PHPSESSIDпосле выхода никуда не делась, и объясните себе, почему доступ всё равно закрыт; - посложнее: сделайте подтверждение выхода — маленькая страница «точно выйти?» с двумя ссылками.
Итоги
- выход — это очистка сессии:
$_SESSION = []иsession_destroy(), затем редирект; - logout.php — скрипт без интерфейса, как обработчик формы;
- оставшаяся в браузере кука
PHPSESSIDбезвредна: её сессия уничтожена.
Курс завершён
Мы прошли весь путь: как сервер отдаёт страницы, как передать данные через GET-параметры, как принимать формы, редиректить, «узнавать» посетителя по кукам и сессиям — и наконец построили вход и выход. Дальше — учебник по PHP и полная программа подготовки бэкэнд-разработчика. Все уроки — в списке курса.
- Log in to post comments
- 21 reads