Laravel 5.3:会话数据库无法按预期工作

时间:2017-01-31 16:57:33

标签: php database laravel session laravel-5.3

我刚刚添加了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事件登录时添加。

有时我需要访问已登录用户的新链接,但我不想强制他们退出然后登录。我想直接在用户的会话中应用更改(如果有效)。所以,如果你能帮助我弄清楚为什么我的数据库会话不起作用,我会很感激。

如果您认为有更好的方法来实现我的目标,建议,我会感激不尽!

1 个答案:

答案 0 :(得分:1)

为什么要写but only the default column from the php artisan session:table command are filledsession: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, $
        );
    }