Урок 12: Сессии
При посещении сайта вы выполняете различные действия. Переходите с одной страницы на другую. Возможно, заполняете форму или покупаете что-то.
Это очень важно учитывать при создании успешных вэб-проектов.
Предположим, например, что вы хотите создать сайт, на котором несколько страниц защищены логином и паролем. Чтобы эта защита действовала эффективно, защищённые паролем страницы должны иметь доступ к информации о том, зашёл ли пользователь ранее в систему. Вы должны, иначе говоря, "помнить", что пользователь делал до этого.
Именно об этом наш урок - как использовать сессии в PHP для сохранения и получения информации в процессе визита пользователя на наш сайт.
Сессии
РНР-сессии
дают возможность работать с информацией о пользовательской сессии. Вы можете создавать приложения, которые идентифицируют и собирают
информацию о пользователях.
Сессии могут начинаться разными способами. Мы не будем углубляться в технические тонкости, а сконцентрируемся на варианте, когда сессия начинается с сохранения значения. Сессия заканчивается/загибается (dies), если пользователь не запрашивает страниц в течение какого-то времени (стандартное значение - 20 минут). Разумеется, вы в любой момент можете закончит/убить сессию в вашем скрипте.
Скажем, 50 пользователей просматривают страницы одного сайта, например, вэб-шоп. Информацию о том, что у каждого посетителя в корзине, лучше всего сохранить в сессии. Чтобы идентифицировать пользователей, сервер использует уникальные пользовательские идентификаторы/user ID, которые хранятся в куках. Кука это небольшой текстовый файл, хранимый на компьютере пользователя (см. Урок 13). Следовательно, сессии часто требуют поддержки кук в браузерах пользователей.
Пример использования сессий
Если вы запрашиваете эту страницу, я сохраняю текущее время в сессии. Я сделал это и могу теперь показать вам пример работы сессии.
Я назвал элемент "StartTime" и сохранил его, добавив следующую строку в мой РНР-скрипт:
<?php session_start(); $_SESSION["StartTime"] = date("r"); ?>
Таким образом, сессия началась. Как сказано выше, каждая сессия получает ID от сервера.
Ваша сессия имеет следующий ID: pb0b2qmiti62385vhll7j126s0
В любое время я могу вызвать "StartTime" из сессии, введя:
<?php session_start(); echo $_SESSION["StartTime"]; ?>
что покажет, что страница была запрошена в (в соответствии с временем данного вэб-сервера).
Но интересно, штаа эта информация остаётся в сессии, даже после выхода со страницы. Эта информация будет сопровождать вас, пока ваша сессия не завершится.
По умолчанию сессия длится, пока пользователь не закроет окно браузера, и тогда она загибается автоматически. Но если вы хотите принудительно завершить сессию, её всегда можно замочить таким образом:
<?php session_destroy(); ?>
Посмотрим другой пример использования сессий: с паролем.
Логин в систему с сессиями
В следующем примере мы создадим простейшую систему с логином. Используем многое из того, что изучили на предыдущих занятиях.
Первое, что необходимо, это форма, в которой люди могу указывать username и password. Она может выглядеть так:
<html> <head> <title>Login</title> </head> <body> <form method="post" action="login.php"> <p>Username: <input type="text" name="username" /></p> <p>Password: <input type="text" name="password" /></p> <p><input type="submit" value="Let me in" /></p> </form> </body> </html>
Затем создадим файл login.php.
В этом файле мы проверяем, введены ли корректные username и password. Если это так, мы начинаем сессию, в которой указано, что пользователь вошёл с корректными username и password.
<html> <head> <title>Login</title> </head> <body> <?php // Проверить корректность username и password if ($_POST["username"] == "php" && $_POST["password"] == "php") { // Если корректны, устанавливаем значение сессии в YES session_start(); $_SESSION["Login"] = "YES"; echo "<h1>Вы зашли некорректно</h1>"; echo "<p><a href='document.php'>Ссылка на защищённый файл</a><p/>"; } else { // Если некорректны, устанавливаем сессию в NO session_start(); $_SESSION["Login"] = "NO"; echo "<h1>Вы зашли НЕкорректно </h1>"; echo "<p><a href='document.php'>Ссылка на защищённый файл</a><p/>"; } ?> </body> </html>
При работе с защищёнными файлами мы проверяем, вошёл ли пользователь с корректным логином. Если нет, the пользователь отправляется обратно к логин-форме. Вот как делается эта защита:
<?php // Начать вашу РНР-сессию session_start(); // Если пользователь не зашёл, отправить его/её к логин-форме if ($_SESSION["Login"] != "YES") { header("Location: form.php"); } ?> <html> <head> <title>Логин</title> </head> <body> <h1>Этот документ защищён</h1> <p>Вы можете получить к нему доступ, только если вошли в систему.</p> </body> </html>
Вы получили представление об объекте Session. В следующем уроке мы продолжим работу в этом же направлении, но также подробнее познакомимся с куками.