2017-08-07 181 views
1

今天,当我想为我的网站创建用户资料页面,要创建的系统用户可以管理自己在这个系统中活动的会话需要如何Yii2创建用户会话管理系统DbSession

  • 查看活动会话浏览器和平台
  • 看到什么是当前会话
  • 删除不需要的活动会话

我们怎样才能做到这一点?

回答

1

我觉得这是解决方案,我的用户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模型数据库并将其用于配置文件页面以显示或删除用户会话