Статьи

Сессии PHP

$_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. Вы также видели несколько советов, чтобы обеспечить их безопасность. Для получения дополнительной информации о сеансах и безопасности сеансов, пожалуйста, ознакомьтесь с этими предлагаемыми статьями и веб-страницами:

Изображение через Коханчикова / Shutterstock

И если вам понравилось читать этот пост, вы полюбите Learnable ; место, чтобы узнать новые навыки и приемы у мастеров. Участники получают мгновенный доступ ко всем электронным книгам SitePoint и интерактивным онлайн-курсам, таким как Jump Start PHP .

Комментарии к этой статье закрыты. Есть вопрос по PHP? Почему бы не спросить об этом на наших форумах ?