PHP Session что это и как с ними работать на примерах

PHP Session что это и как с ними работать на примерах

Время от времени есть необходимость сохранять данные пользователя для разных задач пока этот пользователь пользуется нашим сайтом, для этого есть PHP session. То есть, это сессии в которые можно занести какие либо данные в которые будут храниться на сервере. В одной из прошлой статей мы уже описывали PHP cookie и как они работают. Сейчас расскажем про сессии более детально.

Что такое PHP session

Каждый раз, когда пользователь заходит под своими данными на сайт, сервер создает сессию в которую записывает некоторые данные пользователя. То есть, введя логин и пароль в форме авторизации, сервер проверяет правильность введенных данных и если все в порядке то создает session и записывает в нее логин пользователя.

Начать php session можно с помощью функции session_start() в самом начале скрипта. Важно понимать, что эта функция должна выводиться в самом верху и самая первая, иначе может быть ошибка.

<?php
session_start(); // запуск сессии

$_SESSION["user"] = "IT шаман"; // сохраняем данные
echo "Привет, " . $_SESSION["user"] . "!";
?>

Сейчас объясним что здесь произошло в коде:

  • session_start() — включает работу сессий, без этого никак.
  • $_SESSION — это суперглобальный массив в котором и хранятся все сессии текущего пользователя.

Мы запустили сессию, далее создали переменную сессии $_SESSION["user"] и внести в нее данные. Далее, просто вывели значение нашей новой сессии.

Получение данных из PHP session

Как описывали выше, для начала нужно запустить сессию. Далее, проверяем наличие нужной нам сессии и если она существует то работаем с ее значением.

<?php
session_start();

if (isset($_SESSION["user"])) {
    echo "Пользователь: " . $_SESSION["user"];
} else {
    echo "Пользователь не найден";
}
?>

Если существует $_SESSION["user"] то мы просто выводим ее на экран. Если же ее не существует то выводим отрицательное сообщение.

Удаление данных из PHP session

Иногда нужно удалить все сессии чтоб не занимать память, например, когда пользователь выходит из своего аккаунта.

<?php
session_start(); // запускает работу сессий
session_unset(); // удаляет все переменные сессий
session_destroy(); // уничтожает саму сессию
?>

При срабатывании функции session_destroy() все сессии удалятся и пользователь будет не авторизован, то есть, как гость.

Безопасность PHP session

Иногда нужно обезопасить данные сессий и сами сессии от кражи или подмены данных.

  • Необходимо использовать функцию session_regenerate_id() после авторизации.
  • Передавайте все данные только при наличии SSL сертификата по протоколу HTTPS.
  • Старайтесь не хранить секретные данные в $_SESSION в открытом виде.
<?php
session_start();
session_regenerate_id(true); // обновляем ID при входе
$_SESSION["logged_in"] = true;
?>

Пример авторизации с сессиями PHP

Пример html кода формы:

<form method="post">
  <input type="text" name="login" placeholder="Логин">
  <input type="password" name="password" placeholder="Пароль">
  <button type="submit">Войти</button>
</form>

Пример php кода обработки формы:

<?php
session_start();

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $user = $_POST["login"];
    $pass = $_POST["password"];

    if ($user === "admin" && $pass === "1234") {
        $_SESSION["user"] = $user;
        echo "Добро пожаловать, $user!";
    } else {
        echo "Неверный логин или пароль!";
    }
}
?>

Итоги работы сессий PHP

Как вы увидели выше, сессии это очень удобный инструмент для хранения данных. Данные php session можно добавить в cookie или наоборот, а также, передавать туда данные из базы данных или наоборот. Все зависит от конкретной задачи и вашей фантазии.