Я использую драйвер базы данных для хранения сеансов. Когда я обновляю полезную нагрузку, представления, зависящие от данных в полезной нагрузке, не обновляются.Laravel-5.3: сеанс обновления не работает должным образом
В мой взгляд, я часто такие вещи:
@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.
Итак, если пользователь вышел из системы, а затем войдите в систему, у меня не возникло проблем, когда я внес некоторые изменения в таблицу users.
Проблема заключается в том, что сеанс активен, и пользователь не выходит из системы. Если я сделаю некоторые изменения, представление останется таким же, как и раньше.
В моем контроллере пользователя есть то, что происходит:
$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
сразу после того, как сессии были обновлены, но проблема сохраняется.
Единственный способ, которым я могу сделать эту работу, - это удалить все сеансы пользователя в таблицу. Я не хочу идти этим путем, так что мне не хватает? Почему обновление сеанса не работает, как я ожидаю?
Если я хорошо понимаю, сессия хранится на стороне клиента при входе пользователя в систему. Поскольку атрибуты app set() во время события LogSuccesfulLogin, даже если я изменяю полезную нагрузку в базе данных, это не изменяет данные на стороне клиента, потому что токен по-прежнему совпадает, а клиент не обновляет данные. Итак, теперь у меня есть 2 выбора. Удаление всех сеансов пользователей при изменении его прав или поиск способа изменить полезную нагрузку по каждому запросу? Это правильно? –
Я изменил код, в котором меняю полезную нагрузку на '/ * * /', и добавил эту строку '$ sessions = DB :: table ('sessions') -> где ('user_id', $ user-> id) - > удалить(); '. Это делает работу, мне не очень нравится, как она это делает. Он генерирует новый сеанс без выхода пользователя из системы. Я сделаю так, пока не смогу понять, как изменить полезную нагрузку на стороне клиента, не удаляя каждую сессию. –