Использование сессий — это хороший способ сохранять информацию между визитами пользователя на сайт. Изначально, в 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');

Здравствуйте, а в чем преимущество применения этих методов по сравнению с работой с обычными сессиями? Там есть какая-то фильтрация или что?
Добрый день. Принципиальных отличий нет. Подробности реализации можно увидеть в коде класса yii\web\Session.
Принципиальное различие в том, что в Yii2 можно легко заменить хранилище сессий. Допустим, если мне больше хочется использовать Redis или базу данных, чтобы снизить чтение-запись жесткого диска. В Yii2 это сделать гораздо проще, учитывая, что для этого есть специальный интерфейс.
Отличий в результате работы нет, отличие в удобвстве использования, yii2 даёт вам возможность юзать сессии и куки в ООП режиме, а не копаться в массивах, что значительно удобнее. Кроме того вы можете цепляя различные компоненты хранить куки в разных местах, будто просто таблица в БД, редис или mondoDB, код менять не придётся, просто цепляете нужный компонент и всё. Вот тут хорошо написано об этом: http://nix-tips.ru/yii2-api-guides/guide-ru-runtime-sessions-cookies.html
Получение всех данных сессии — получит массив __array и вызовет ошибку на echo
(проверено — именно так)
*** массив __flash