Yii 2数据库会话-存储附加属性和用户信息

jogvjijk  于 2022-11-09  发布在  其他
关注(0)|答案(3)|浏览(176)

我正在使用Yii 2的DBSession类将web应用程序会话存储到一个名为session的数据库表中。
默认情况下,此表只有3列-idexpiredata
我想在这个表中存储其他信息,比如登录用户的user_id

Edit:有一个父类叫做yii\web\MultiFieldSession,但是没有关于如何使用它的例子。我会看看我能发现什么...

lskq00tm

lskq00tm1#

创建迁移:

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

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

将以下内容添加到config:

'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'.
    ],
x7yiwoj4

x7yiwoj42#

检查writeCallBack(将在会话数据写入期间调用的回调)
通过使用callback,您可以设置自己的数据库字段..由composeField()使用

odopli94

odopli943#

我不想在配置文件中使用函数,所以我最终得到了这样的结果:
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;
    }
}

相关问题