今天,當我想爲我的網站創建用戶資料頁面,要創建的系統用戶可以管理自己在這個系統中活動的會話需要如何Yii2創建用戶會話管理系統DbSession
- 查看活動會話瀏覽器和平臺
- 看到什麼是當前會話
- 刪除不需要的活動會話
我們怎樣才能做到這一點?
今天,當我想爲我的網站創建用戶資料頁面,要創建的系統用戶可以管理自己在這個系統中活動的會話需要如何Yii2創建用戶會話管理系統DbSession
我們怎樣才能做到這一點?
我覺得這是解決方案,我的用戶user_id
保存到會話表
Yii2 database session - store additional attributes and user information
Logging out specified user, listing who's online by using DB sessions
但在實現這個問題的另一個問題:如何將用戶會話的基於瀏覽器的分類和平臺,我發現這個解決方案。
我在會議數據庫中添加了另一列,並在其中使用了this class和下面的代碼保存了瀏覽器信息和用戶平臺信息。
'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
並返回一個空字符串值,我找到了解決方案下面的鏈接。
Blank Session ID in Module's BeforeAction
在Yii2高級創建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模型數據庫並將其用於配置文件頁面以顯示或刪除用戶會話