Laravel чтение/установка cookies работает иногда, как починить?
Пытаюсь на Laravel 8.x сделать форму для согласия с политикой конфиденциальности.
Столкнулся с проблемой, что Cookie::get('personal_data'); ИНОГДА возвращает null при том, что кука установлена и я её вижу в Chrome Devtools.
$cookiePersonalData = Cookie::get('personal_data'); |
$cookiePersonalData = Cookie::get('personal_data');
'personal_data' добавлена в исключения в
use IlluminateCookieMiddlewareEncryptCookies as Middleware; class EncryptCookies extends Middleware { protected $except = [ 'personal_data' ]; } |
use IlluminateCookieMiddlewareEncryptCookies as Middleware; class EncryptCookies extends Middleware { protected $except = [ 'personal_data' ]; }
Появляется окно, нажимаю кнопку.
Cookies устанавливается. Это видно в отладчике.
Обновляю страницу и ИНОГДА опять получаю запрос на подтверждение, хотя при установленной cookies 'personal_data' этого блока вообще не должно быть на сайте.
Что я делаю не так?
@php $cookiePersonalData = Cookie::get('personal_data'); @endphp @empty($cookiePersonalData) <div class="cookies_consent cookies_consent--active"> <div class="cookies_consent__text"> ... <button class="cookies_consent__apply" type="button">Принять</button> </div> </div> <script> const container = document.querySelector('.cookies_consent'); if (container) { const apply = container.querySelector('.cookies_consent__apply'); apply.addEventListener('click', () => { container.classList.remove('cookies_consent--active'); document.cookie = 'personal_data=true; domain=.{{ env('APP_DOMAIN') }}; path=/; max-age=2592000'; }); }; </script> @endempty |
@php $cookiePersonalData = Cookie::get('personal_data'); @endphp @empty($cookiePersonalData) <div class="cookies_consent cookies_consent--active"> <div class="cookies_consent__text"> ... <button class="cookies_consent__apply" type="button">Принять</button> </div> </div> <script> const container = document.querySelector('.cookies_consent'); if (container) { const apply = container.querySelector('.cookies_consent__apply'); apply.addEventListener('click', () => { container.classList.remove('cookies_consent--active'); document.cookie = 'personal_data=true; domain=.{{ env('APP_DOMAIN') }}; path=/; max-age=2592000'; }); }; </script> @endempty
в NGINX есть такая настройка:
fastcgi_cache_key "$scheme$host$request_method$request_uri"; fastcgi_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie; |
fastcgi_cache_key "$scheme$host$request_method$request_uri"; fastcgi_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
Если я правильно понимаю, что cookies не кэшируются сервером.
Дополнительно:
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для начала, убедитесь, что вы правильно устанавливаете и читаете куки в вашем Laravel приложении. В Laravel для установки кук используется метод response()->withCookie(), а для чтения кук - метод request()->cookie().
Если у вас проблемы с чтением или установкой кук, вот несколько шагов, которые могут помочь вам исправить проблему:
1. Убедитесь, что вы правильно устанавливаете куки. Для этого используйте метод response()->withCookie(). Например:
$response = new Response('Hello World'); $response->withCookie(cookie('name', 'value', $minutes)); return $response;
2. Проверьте, что вы правильно читаете куки. Для этого используйте метод request()->cookie(). Например:
$value = $request->cookie('name');
3. Проверьте настройки безопасности вашего приложения. Иногда настройки безопасности могут блокировать чтение или установку кук. Убедитесь, что ваше приложение настроено правильно.
4. Проверьте, что у вас нет конфликтов с другими куками или сеансами. Иногда конфликты могут привести к неправильному чтению или установке кук.
Если после выполнения этих шагов проблема все еще остается, рекомендуется проверить логи вашего приложения на наличие ошибок или предупреждений, которые могут указывать на причину проблемы с куками. Также вы можете попробовать обновить Laravel до последней версии, так как возможно проблема была исправлена в более новых версиях фреймворка.
Надеюсь, эти советы помогут вам исправить проблему с чтением и установкой кук в Laravel. Если у вас остались дополнительные вопросы, не стесняйтесь задавать их.