Yii2: Разбираемся с сессиями

yii2 session flash

Использование сессий — это хороший способ сохранять информацию между визитами пользователя на сайт. Изначально, в php, работа с сессиями ведется через глобальный массив $_SESSION. Для удобства работы, экземпляр приложения yii2 содержит компонент yii\web\Session, доступный через Yii::$app->session.

Открытие и закрытие сессий

Простой код, иллюстрирующий работу с сессиями.

$session = Yii::$app->session;

// проверяем наличие открытой сессии
if ($session->isActive) ...

// открываем сессию
$session->open();

// закрываем сессию
$session->close();

// уничтожаем все данные сессии
$session->destroy();

Многократный вызов методов open() и close() не приводит к ошибкам, так как, эти методы включают внутреннюю проверку на наличие открытой сессии.

Сохранение данных в сессии

$session = Yii::$app->session;
// первый вариант
$session->set('language', 'ru');
// второй вариант
$session['language'] = 'ru';
// третий вариант
$_SESSION['language'] = 'ru';

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

$session = Yii::$app->session;
// первый вариант
$language = $session->get('language');
// второй вариант
$language = $session['language'];
// третий вариант
$language = isset($_SESSION['language']) ? $_SESSION['language'] : null;

Удаление значения из сессии

$session = Yii::$app->session;
// первый вариант
$session->remove('language');
// второй вариант
unset($session['language']);
// третий вариант
unset($_SESSION['language']);

Проверка наличия данных в сессии

// первый вариант
if ($session->has('language')) ...
// второй вариант
if (isset($session['language'])) ...
// третий вариант
if (isset($_SESSION['language'])) ...

Получение всех данных сессии

// первый вариант
foreach ($session as $session_name => $session_value)
    echo $session_name.' - '.$session_value;
// второй вариант
foreach ($_SESSION as $session_name => $session_value)
    echo $session_name.' - '.$session_value;

Массивы в сессии

$session = Yii::$app->session;
// первый вариант
$session['user'] = [
    'id' => 1,
    'username' => 'superuser',
];
// второй вариант
$session['user.id'] = 1;
$session['user.username'] = 'superuser';
// не работоспособный вариант
$session['user']['id'] = 1;
$session['user']['username'] = 'superuser';
// обращение к данным массива
echo $session['user']['id'];
echo $session['user']['username'];

Flash сообщения с использованием сессий

Данный метод позволяет однократно отобразить flash сообщение и удалить данные о нем.

$session = Yii::$app->session;
// устанавливаем значение flash сообщения
$session->setFlash('userinsert', 'Регистрация прошла успешно!');
// проверяем наличие сообщения
$result = $session->hasFlash('userinsert');
// получаем и отображаем сообщение
echo $session->getFlash('userinsert');

 

6 thoughts on “Yii2: Разбираемся с сессиями

  1. Александр

    Здравствуйте, а в чем преимущество применения этих методов по сравнению с работой с обычными сессиями? Там есть какая-то фильтрация или что?

      1. Виталий

        Принципиальное различие в том, что в Yii2 можно легко заменить хранилище сессий. Допустим, если мне больше хочется использовать Redis или базу данных, чтобы снизить чтение-запись жесткого диска. В Yii2 это сделать гораздо проще, учитывая, что для этого есть специальный интерфейс.

    1. Yazu

      Отличий в результате работы нет, отличие в удобвстве использования, yii2 даёт вам возможность юзать сессии и куки в ООП режиме, а не копаться в массивах, что значительно удобнее. Кроме того вы можете цепляя различные компоненты хранить куки в разных местах, будто просто таблица в БД, редис или mondoDB, код менять не придётся, просто цепляете нужный компонент и всё. Вот тут хорошо написано об этом: http://nix-tips.ru/yii2-api-guides/guide-ru-runtime-sessions-cookies.html

  2. Бублик

    Получение всех данных сессии — получит массив __array и вызовет ошибку на echo
    (проверено — именно так)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *