Сегодня, когда я хочу создать страницу профиля пользователя для своего сайта и хочу, чтобы пользователи системы могли управлять своими активными сеансами в этой системе, нужно
Как мы можем это сделать?
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 для базы данных сеанса и использую ее на странице профиля для показа или удаления сеансов пользователя