Intereting Posts
php geo ip loc не работает Как запретить пользователю загружать или сохранять изображение? В DDD и CQRS для запросов на чтение, что такое стратегия, которая позволяет использовать интерфейсы и простое тестирование? выбрать несколько опций Почему (0 == 'Hello') возвращает true в PHP? Исключение Symfony2 при попытке вставить коллекцию форм Различия между циклом while и циклом for в PHP? отображение 2 или 3 изображений в строке с помощью php mysql Действительно ли инъекция SQL возможна путем добавления второго запроса? функция ошибки выполняет () в булевом режиме, предотвращая дублирование Почему это XSS-атака и как это предотвратить? PHP / SQL создает ссылки на следующую строку в базе данных Преобразовать строку «десять» в целое число 10 Расстояние от точки A до B с помощью Google Maps, PHP и MySQL Как сохранить динамический XML-файл с сервера на локальный компьютер?

Как создать систему управления сеансом пользователя в Yii2 с помощью DbSession

Сегодня, когда я хочу создать страницу профиля пользователя для своего сайта и хочу, чтобы пользователи системы могли управлять своими активными сеансами в этой системе, нужно

  • Просмотр активных сеансов Браузеры и платформы
  • Просмотреть текущую сессию
  • удалить нежелательные активные сеансы

Как мы можем это сделать?

I Найти это решение, чтобы сохранить пользователей user_id в таблице сеанса

Сеанс базы данных Yii2 – сохранение дополнительных атрибутов и информации о пользователе

Выйти из указанного пользователя, указав, кто в сети, используя сеансы DB

Но есть еще одна проблема при реализации этой проблемы: как классифицировать сеансы пользователей на основе их браузера и платформы, и я нашел это решение.

Я добавил еще одну колонку в базу данных сеанса, а внутри нее, используя этот класс и приведенный ниже код, я сохранил информацию о браузере и информацию о пользовательской платформе.

 'components' => [ //... 'session' => [ 'class' => 'yii\web\DbSession', 'writeCallback' => function ($session) { $user_browser = null; if (!Yii::$app->user->isGuest) { $browser = new \BrowserDetection(); $user_browser = "{$browser->getName()}-{$browser->getPlatform()}" . ($browser->is64bitPlatform() ? "(x64)" : "(x86)") . ($browser->isMobile() ? "-Mobile" : "-Desktop"); } return [ 'user_id' => Yii::$app->user->id, 'last_write' => new \yii\db\Expression('NOW()'), 'browser_platform' => $user_browser ]; } ], // ... ] 

Примечание: вы добавляете другие данные в таблицу сеансов

Но чтобы найти текущий сеанс, я столкнулся с проблемой, когда я проверил Yii::$app->session->id и вернул пустое строковое значение, и я нашел решение по ссылке ниже.

Идентификатор пустой записи в модуле BeforeAction

в Yii2-Advanced я создаю frontend\components\baseController и расширяю все контроллеры от него и создаю beforeAction() и открываю сессию в нем примерно так:

 namespace frontend\components; class BaseController extends \yii\web\Controller { public function beforeAction($action) { if (parent::beforeAction($action)) { Yii::$app->session->open(); return true; } return false; } } 

В конце я создаю модель ActiveRecord для базы данных сеанса и использую ее на странице профиля для показа или удаления сеансов пользователя