【发布时间】:2017-06-17 14:33:05
【问题描述】:
我正在使用数据库驱动程序来存储会话。当我更新有效负载时,取决于有效负载中的数据的视图不会更新。
在我看来,我经常有这样的事情:
@if( Session::get('quicktrade') == 'Client' )
<li class="@if ($coreData['navParent'] == 'quicktrade') active open @endif">
<a href="javascript:;">
<i class="ico-quicktrade-{{Session::get('left_menu')}}"></i>
<span class="title">QUICK[TRADE]</span>
<span class="arrow @if ($coreData['navParent'] == 'quicktrade') open @endif"></span>
@if ($coreData['navParent'] == 'quicktrade') <span class="selected"></span> @endif
</a>
<ul class="sub-menu">
@if( Session::get('quicktrade_evaluation') == 1 )
<li class="@if ($coreData['navChild'] == 'evaluation') active @endif">
<a href="{{ url('/quicktrade/evaluation') }}">
NOUVELLE ÉVALUATION</a>
</li>
@endif
@if ( Session::get('quicktrade_liste') == 1 )
<li class="@if ($coreData['navChild'] == 'liste') active @endif">
<a href="{{ url('/quicktrade/liste') }}">
LISTE DES VÉHICULES</a>
</li>
@endif
@if ( Session::get('quicktrade_statistiques') == 1 )
<li class="@if ($coreData['navChild'] == 'statistiques') active @endif">
<a href="{{ url('/quicktrade/statistiques') }}">
STATISTIQUES</a>
</li>
@endif
</ul>
</li>
@endif
这使菜单是否显示选项取决于会话。
在 LogSuccesfulLogin 事件期间,所有数据都将添加到有效负载中。
因此,如果用户注销然后登录,我在用户表中进行一些更改时没有问题。
问题是会话处于活动状态且用户未注销时。如果我进行一些更改,视图将保持与以前相同。
在我的用户控制器中发生了什么:
$user = User::with('acces')->find($user->id);
$sessions = DB::table('sessions')->where('user_id', $user->id)->get();
foreach ($sessions as $session) {
$payload = unserialize(base64_decode($session->payload));
$payload['oneaction'] = $user->acces->oneaction;
$payload['oneaction_type'] = $user->acces->oneaction_type;
if ($user->acces->oneaction == 'Client') {
$payload['oneaction_clients'] = $user->acces->oneaction_clients;
$payload['oneaction_list'] = $user->acces->oneaction_list;
$payload['oneaction_creator'] = $user->acces->oneaction_creator;
} else {
$payload['oneaction_clients'] = 0;
$payload['oneaction_list'] = 0;
$payload['oneaction_creator'] = 0;
}
//dd($payload);
$payload = base64_encode(serialize($payload));
DB::table('sessions')->where('id', $session->id)->update(['payload' => $payload]);
}
$sessions = DB::table('sessions')->where('user_id', $user->id)->get();
foreach ($sessions as $session) {
$payload = unserialize(base64_decode($session->payload));
//dd($payload);
}
正如您在上面的代码中看到的,有 2 个dd()。两者都向我表明更改已正确完成。当我重新加载页面时,左侧菜单没有变化。
我尝试在会话更新后立即执行php artisan view:clear,但问题仍然存在。
我能够完成这项工作的唯一方法是将用户的所有会话删除到表中。我不想走这条路,所以我错过了什么?为什么更新会话没有像我预期的那样工作?
【问题讨论】:
标签: php session laravel-5.3