Php Laravel 5.3:会话数据库未按预期工作

Php Laravel 5.3:会话数据库未按预期工作,php,database,laravel,session,laravel-5.3,Php,Database,Laravel,Session,Laravel 5.3,我刚刚添加了默认的Laravel迁移,以使用数据库会话。在此之前,我使用的是文件系统。我这样做了:php-artisan-session:table,然后添加了我已经在文件会话中使用的所有列。在此之后,我使用默认值'driver'=>env('session\u driver','database'),更改了config/session.php,然后我将.env更改为 BROADCAST_DRIVER=log CACHE_DRIVER=file SESSION_DRIVER=database Q

我刚刚添加了默认的Laravel迁移,以使用数据库会话。在此之前,我使用的是文件系统。我这样做了:
php-artisan-session:table
,然后添加了我已经在文件会话中使用的所有列。在此之后,我使用默认值
'driver'=>env('session\u driver','database'),
更改了
config/session.php
,然后我将
.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

目标
我想使用数据库,因为经过一些阅读,这是一种在用户身份验证()时更改数据的方法。我使用会话创建视图。例如:

@if( Session::get('intellitaux_simple') == 1 )
    <li class="@if ($coreData['navChild'] == 'simple') active @endif">
         <a href="{{ url('/intellitaux/simple') }}">INTELLITAUX SIMPLIFIÉ</a>
    </li>
@endif
@if(Session::get('intellitaux\u simple')==1)
  • @恩迪夫
    会话的数据是在用户使用
    logsuccessfullogin.php
    事件登录时添加的

    有时我需要给已经登录的用户提供访问新链接的权限,但我不想强迫他们注销然后再登录。如果处于活动状态,我希望直接在用户会话中应用更改。所以,如果您能帮助我找出我的数据库会话无法工作的原因,我将不胜感激


    如果你认为有更好的方法来达到我的目标,建议,我将不胜感激

    为什么要编写
    ,但只填充php artisan会话: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/illumb/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, $
            );
        }
    

    谢谢,我刚刚对默认值和php迁移进行了一些编辑。我不知道DatabaseSessionHandler。我想使用Session::set('key',value)将把值放在auth user Session行中Session表的key列中。
    Session::set('key',value)
    changes
    payload
    field only.1。这些文件是新的吗?它可能只是旧文件。垃圾收集器无法删除它们,因为它会清理数据库并且不知道它们。2.每个创建的会话都是一行。如果用户在其他浏览器中打开网站,他将获得新会话。查看
    last_activity
    字段以查找上次活动的会话。但请记住,用户可以在一组处于活动状态的计算机上拥有许多浏览器。我认为这是一个好方法。Smth类似于
    foreach{base64_解码(有效载荷)->set->base64_编码->保存}
    我发现:
    $payload=unserialize(base64_解码($session->payload))然后我可以使用
    $payload['key']=$value。在此之后,运行一个
    $session->payload=base64_encode(序列化($payload))$会话->保存()工作完美!