我刚刚将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
事件登录时添加的。
有时我需要为已经登录的用户提供新链接的访问权限,但我不想强制他们注销然后重新登录。如果用户会话处于活动状态,我希望直接应用更改。因此,如果您能帮助我找出为什么我的数据库会话不起作用,我将不胜感激。
如果您认为有更好的方法来达到我的目标,请建议,我将不胜感激!
Session::set('key', value)
只会改变payload
字段。 - shukshin.ivanforeach{ base64_decode(payload) -> set -> base64_encode -> save }
。 - shukshin.ivan$payload = unserialize(base64_decode($session->payload));
然后,我可以使用$payload['key'] = $value;
更改想要的内容。之后运行$session->payload = base64_encode(serialize($payload)); $session->save();
即可完美地工作! - Elie Morin