Программирование, веб-кодинг

Сессии в Yii 2

Для сохранения пользовательских данных между запросами используются сессии

Сессии в Yii 2

В php работа с сессиями происходит через глобальный массив $_SESSION. В Yii 2 есть компонент yii\web\Session, который доступен через Yii::$app->session. Посмотрим как работать с ним.

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

<span class="kwd">use</span><span class="pln">  yii\web\Session</span><span class="pun">;</span><span class="pln">
</span><span class="com">// инициализация сессии</span><span class="pln"></span>
$session = Yii::$app->session; 
// проверяем наличие открытой сессии
if ($session->isActive) ... 
// открываем сессию
$session->open(); 
// закрываем сессию
$session->close(); 
// уничтожаем все данные сессии
$session->destroy();

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

$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' => 'You',
];
// второй вариант
$session['user.id'] = 1;
$session['user.username'] = 'You';
// неработоспособный вариант
$session['user']['id'] = 1;
$session['user']['username'] = 'You';
// обращение к данным массива
echo $session['user']['id'];
echo $session['user']['username'];

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

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

Подробнее читайте в офиц. документации про Сессии и куки (или на англ. Sessions and Cookies)