$_SESSION
Самый фундаментальный способ объяснить, на что похожа сессия, — это представить следующий сценарий:
Вы работаете с приложением. Вы открываете его, вносите некоторые изменения, а затем закрываете его.
Это сессия в простейшей форме.
Пример сценария напоминает процесс, который происходит при использовании системы входа в систему. Процесс может быть чрезвычайно сложным или невероятно простым, если между запросами сохраняется значение. Информация, хранящаяся в сеансе, может быть вызвана в любое время во время открытого сеанса.
Несмотря на то, что к сайту могут одновременно обращаться многие пользователи, каждый из которых имеет свой собственный сеанс, благодаря уникальным идентификаторам, назначаемым и управляемым PHP для каждого сеанса, позволяет каждому сеансу пользователя быть доступным только ему самому. Информация о сеансе хранится на сервере, а не на компьютере пользователя (поскольку данные cookie хранятся), что делает сеансы более безопасными, чем традиционные файлы cookie, для передачи информации между запросами страниц.
В этой статье я расскажу вам, как использовать сессии в PHP — как их создавать, как их уничтожать и как обеспечить их безопасность.
Использование сессий
Прежде чем вы сможете хранить информацию в сеансе, вы должны начать обработку сеанса PHP. Это делается в начале вашего PHP-кода и должно быть выполнено до того, как любой текст, HTML или JavaScript будет отправлен в браузер. Чтобы начать сеанс, вы вызываете функцию session_start()
<?php
// start them engines!
session_start();
// store session data
$_SESSION["username"] = "Callum";
session_start()
$_SESSION
Во втором файле вы снова вызываете session_start()
$_SESSION
<?php
// continue the session
session_start();
// retrieve session data
echo "Username = " . $_SESSION["username"];
Этот пример является очень простой демонстрацией хранения и извлечения данных в сеансе. В первом сценарии значение «Callum» было связано с ключом «username» в $_SESSION
Во втором скрипте информация запрашивалась обратно из массива $_SESSION
$_SESSION
Завершение сеанса
Как важно начать сеанс, так и завершить его. Несмотря на то, что сеанс является лишь временным способом хранения данных, очень важно убирать за собой, чтобы обеспечить максимальную безопасность при работе с потенциально конфиденциальной информацией. Это также хорошая практика, которая позволяет избежать огромного количества устаревших данных сеанса на сервере.
Чтобы удалить одно значение сеанса, вы используете функцию unset()
<?php
session_start();
// delete the username value
unset($_SESSION["username"]);
Чтобы сбросить все значения сеанса, вы можете использовать функцию session_unset()
<?php
session_start();
// delete all session values
session_unset();
Оба примера влияют только на данные, хранящиеся в сеансе, но не на сам сеанс. Вы можете сохранять другие значения в $_SESSION
Если вы хотите полностью прекратить использование сеанса, например, когда пользователь выходит из системы, вы используете функцию session_destroy()
<?php
session_start();
// terminate the session
session_destroy();
Я настоятельно рекомендую, когда вы уверены, что вам больше не нужен сеанс, чтобы уничтожить его с помощью session_destroy()
session_unset()
Если вы просто сбросите все значения, сам сеанс все еще активен, и вредоносный код может дать этим сеансам вредные значения.
Это сессия в двух словах, самая базовая, но очень мощная функциональность в PHP, которая обеспечивает элегантное решение проблемы передачи данных между веб-страницами.
Советы по безопасности сеансов
Несмотря на простоту, есть и другие способы использования сессий. Вот краткий обзор некоторых методов безопасности, которые вы можете использовать, чтобы обеспечить безопасное использование сеансов.
Время ожидания сессии
Тайм-аут сеансов является очень важным действием, если вы имеете дело с пользователями, вошедшими на ваш сайт или в приложение. Если пользователь входит на ваш сайт в интернет-кафе, а затем покидает компьютер и кафе, не выходя из системы, как вы не позволяете следующему пользователю на этом компьютере по-прежнему иметь доступ к сеансу предыдущего пользователя? Ну, вы можете использовать следующий код:
<?php
session_start();
// set time-out period (in seconds)
$inactive = 600;
// check to see if $_SESSION["timeout"] is set
if (isset($_SESSION["timeout"])) {
// calculate the session's "time to live"
$sessionTTL = time() - $_SESSION["timeout"];
if ($sessionTTL > $inactive) {
session_destroy();
header("Location: /logout.php");
}
}
$_SESSION["timeout"] = time();
Код гарантирует, что если в течение более 600 секунд (10 минут) не будет выполнено никаких действий, запрос будет перенаправлен на страницу выхода из системы, которая успешно завершит сеанс пользователя.
Восстановить идентификатор сессии
Функция session_regenerate_id()
Это должно быть восстановлено каждый раз, когда выполняется любое важное действие аутентификации, такое как вход в систему или обновление данных профиля пользователя. Предоставление сеансам нового идентификатора после таких действий делает ваше приложение более безопасным, снижая риск конкретной атаки, известной как «перехват сеанса».
<?php
session_start();
if ($_POST["username"] == "admin" && $_POST["password"] == sha1("password")) {
$_SESSION["authorized"] = true;
session_regenerate_id();
}
Уничтожить сеансы
Как я упоминал ранее, вы должны использовать session_destory()
Это мешает злоумышленникам захватить устаревшую сессию, снова повышая безопасность вашего веб-сайта, связанную с сессиями.
Используйте постоянное хранилище
Используйте базу данных для хранения данных в самый ранний момент, когда вы знаете, что данные будут постоянными; не позволяйте этому оставаться частью сеанса слишком долго, так как это открывает его для возможной атаки. Действительно задумайтесь о том, должны ли данные храниться в $_SESSION
Резюме
В этой статье вы узнали, что такое сессия, и как создавать, использовать и уничтожать их в PHP. Вы также видели несколько советов, чтобы обеспечить их безопасность. Для получения дополнительной информации о сеансах и безопасности сеансов, пожалуйста, ознакомьтесь с этими предлагаемыми статьями и веб-страницами:
- Руководство по PHP — Сессии
- PHP Security Consortium — Руководство по безопасности PHP: Сессии
- Wikibooks — Программирование на PHP: сессии
Изображение через Коханчикова / Shutterstock
И если вам понравилось читать этот пост, вы полюбите Learnable ; место, чтобы узнать новые навыки и приемы у мастеров. Участники получают мгновенный доступ ко всем электронным книгам SitePoint и интерактивным онлайн-курсам, таким как Jump Start PHP .
Комментарии к этой статье закрыты. Есть вопрос по PHP? Почему бы не спросить об этом на наших форумах ?