Пытаюсь на Laravel 8.x сделать форму для согласия с политикой конфиденциальности.
Столкнулся с проблемой, что Cookie::get('personal_data'); ИНОГДА возвращает null при том, что кука установлена и я её вижу в Chrome Devtools.
$cookiePersonalData = Cookie::get('personal_data');
'personal_data' добавлена в исключения в
use Illuminate\Cookie\Middleware\EncryptCookies 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
в NGINX есть такая настройка:
fastcgi_cache_key "$scheme$host$request_method$request_uri";
fastcgi_ignore_headers X-Accel-Expires Expires Cache-Control Set-Cookie;
Если я правильно понимаю, что cookies не кэшируются сервером.