Yii2数据库会话 - 存储其他属性和用户信息

时间:2016-06-22 11:16:43

标签: php session yii yii2

我使用Yii2的DBSession类将Web应用程序会话存储到名为session的数据库表中。

默认情况下,此表只有3列 - idexpiredata

我想在此表格中存储其他信息,例如登录用户的user_id

修改:所以有一个名为yii\web\MultiFieldSession的父类,但没有关于它如何使用的示例。我会看到我能发现的东西......

3 个答案:

答案 0 :(得分:5)

创建迁移:

$this->createTable('session', [
    'id' => $this->char(40)->notNull(),
    'expire' => $this->integer(),
    'data' => $this->binary(),
    'user_id' => $this->integer()
]);

$this->addPrimaryKey('session_pk', 'session', 'id');

将此添加到配置:

'components' => [
    'session' => [
        'class' => 'yii\web\DbSession',
        'writeCallback' => function($session){
            return [
                'user_id' => Yii::$app->user->id
            ];
        }
        // 'db' => 'mydb',  // the application component ID of the DB connection. Defaults to 'db'.
        // 'sessionTable' => 'my_session', // session table name. Defaults to 'session'.
    ],

答案 1 :(得分:0)

检查writeCallBack(在会话数据写入期间将调用的回调)

通过使用回调,您可以设置自己的数据库字段。由composeField()

使用

答案 2 :(得分:0)

我不想要配置文件中的功能,所以我最终得到了这一点:

config/web.php

'components' =>
[
    'session' =>
    [
        'class' => 'app\models\Session',
    ],
],

models/Session.php

class Session extends \yii\web\DbSession
{
    protected function composeFields($id = null, $data = null)
    {
        $fields = parent::composeFields($id, $data);

        $fields['user_id'] = \Yii::$app->user->id;

        return $fields;
    }
}