我刚刚添加了Laravel的默认迁移以使用与数据库的会话。在此之前,我正在使用文件系统。我这样做了:php artisan session:table
然后我添加了我已用于文件会话的所有列。在此之后,我使用默认值config/session.php
更改了'driver' => env('SESSION_DRIVER', 'database'),
,然后我将.env
更改为
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=database
QUEUE_DRIVER=sync
所以对我来说一切都好,我运行这个命令:artisan admin:clear
。命令执行此操作:
public function handle()
{
Artisan::call('clear-compiled');
Artisan::call('cache:clear');
Artisan::call('config:clear');
Artisan::call('view:clear');
Artisan::call('route:clear');
}
然后我运行了这个命令:composer dumpautoload
然后php artisan migrate
也许所有这些命令都不是必需的,但是当我更改配置时,我总是喜欢清理。
真正的问题
现在我仍然得到会话文件,我也有会话进入数据库,但只填充了php artisan session:table
命令中的默认6列。所有其他列保持null
。
目标
我想使用数据库,因为经过一些阅读,它是在用户使用Auth()时能够更改数据的方式。我使用会话来查看。示例:
@if( Session::get('intellitaux_simple') == 1 )
<li class="@if ($coreData['navChild'] == 'simple') active @endif">
<a href="{{ url('/intellitaux/simple') }}">INTELLITAUX SIMPLIFIÉ</a>
</li>
@endif
会话的数据在用户使用LogSuccesfulLogin.php
事件登录时添加。
有时我需要访问已登录用户的新链接,但我不想强制他们退出然后登录。我想直接在用户的会话中应用更改(如果有效)。所以,如果你能帮助我弄清楚为什么我的数据库会话不起作用,我会很感激。
如果您认为有更好的方法来实现我的目标,建议,我会感激不尽!
答案 0 :(得分:1)
为什么要写but only the default column from the php artisan session:table command are filled
? session:table
使用6个字段创建迁移,而不只是一个:
Schema::create('sessions', function (Blueprint $table) {
$table->string('id')->unique();
$table->integer('user_id')->nullable();
$table->string('ip_address', 45)->nullable();
$table->text('user_agent')->nullable();
$table->text('payload');
$table->integer('last_activity');
});
您在php artisan migrate
之后也未提及php artisan session:table
。您是否迁移了6列表?
此表填写在以下文件中
vendor/laravel/framework/src/Illuminate/Session/DatabaseSessionHandler.php
:
$payload = ['payload' => base64_encode($data), 'last_activity' => time()];
if (! $container = $this->container) {
return $payload;
}
if ($container->bound(Guard::class)) {
$payload['user_id'] = $container->make(Guard::class)->id();
}
if ($container->bound('request')) {
$payload['ip_address'] = $container->make('request')->ip();
$payload['user_agent'] = substr(
(string) $container->make('request')->header('User-Agent'), 0, $
);
}