我使用Yii2的DBSession类将Web应用程序会话存储到名为session
的数据库表中。
默认情况下,此表只有3列 - id
,expire
和data
。
我想在此表格中存储其他信息,例如登录用户的user_id
。
修改:所以有一个名为yii\web\MultiFieldSession的父类,但没有关于它如何使用的示例。我会看到我能发现的东西......
答案 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;
}
}