Php Laravel-5.3:更新会话无法正常工作
我正在使用数据库驱动程序来存储会话。当我更新负载时,视图(取决于负载中的数据)不会更新 在我看来,我经常有这样的事情:Php Laravel-5.3:更新会话无法正常工作,php,session,laravel-5.3,Php,Session,Laravel 5.3,我正在使用数据库驱动程序来存储会话。当我更新负载时,视图(取决于负载中的数据)不会更新 在我看来,我经常有这样的事情: @if( Session::get('quicktrade') == 'Client' ) <li class="@if ($coreData['navParent'] == 'quicktrade') active open @endif"> <a href="javascript:;"> <i class
@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
正如您在上面的代码中所看到的,有2个dd()
。两者都向我表明这些更改是正确完成的。重新加载页面时,左侧菜单中没有任何更改。我尝试在会话更新后立即执行
php artisan视图:clear
,但问题仍然存在。我唯一能做到这一点的方法是将用户的所有会话删除到表中。我不想走这条路,所以我错过了什么?为什么更新会话不能像我预期的那样工作?您的会话可能会丢失,因为您的响应不包含会话cookie。在laravel中,这是通过在您的应用程序中启动的middlware来完成的。但是,由于您正在控制器中的某个位置转储和死亡,因此您正在阻止此middlware运行
请注意,这只是一个猜测,可能还有其他原因导致您的饼干丢失。检查您的内核,可能还有您的,并确保您可以在您的应用程序中看到您的cookie 您的会话可能会丢失,因为您的响应不包含会话cookie。在laravel中,这是通过在您的应用程序中启动的middlware来完成的。但是,由于您正在控制器中的某个位置转储和死亡,因此您正在阻止此middlware运行
请注意,这只是一个猜测,可能还有其他原因导致您的饼干丢失。检查您的内核,可能还有您的,并确保您可以在您的应用程序中看到您的cookie 如果我理解得很好,当用户登录时,会话存储在客户端。由于我的app set()属性在logsuccessfullogin事件期间存在,因此即使我更改了数据库上的负载,这也不会更改客户端上的数据,因为令牌仍然匹配,客户端也不会刷新数据。所以,现在我有两个选择。当我更改用户的权限时删除用户的所有会话,或者找到方法更改每个请求的有效负载?是这样吗?我将设置有效负载的代码更改为
/**/
,并添加了这一行$sessions=DB::table('sessions')->where('user_id',$user->id)->delete()代码>。它能胜任工作,我真的不喜欢它的工作方式。它在不注销用户的情况下生成新会话。我会这样做,直到我能想出如何在不删除每个会话的情况下更改客户端的有效负载。如果我理解得很好,当用户登录时,会话将存储到客户端。由于我的app set()属性在logsuccessfullogin事件期间存在,因此即使我更改了数据库上的负载,这也不会更改客户端上的数据,因为令牌仍然匹配,客户端也不会刷新数据。所以,现在我有两个选择。当我更改用户的权限时删除用户的所有会话,或者找到方法更改每个请求的有效负载?是这样吗?我将设置有效负载的代码更改为/**/
,并添加了这一行$sessions=DB::table('sessions')->where('user_id',$user->id)->delete()代码>。它能胜任工作,我真的不喜欢它的工作方式。它在不注销用户的情况下生成新会话。我将这样做,直到我能够想出如何在不删除每个会话的情况下更改客户端的有效负载。
$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);
}