На этом веб-сайте я хочу отображать небольшой баннер с текстом внутри когда новый пользователь впервые заходит на мой сайт (какой бы веб-страница ни была). Баннер имеет следующие характеристики:
- При первом отображении он остается на экране в течение 7 секунд (чтобы пользователь мог его прочитать)
После его исчезновения пользователь может продолжать просматривать сайт и страницы, больше не видя баннер.
В первый раз я создал баннер и файл cookie с помощью кода JavaScript, также установив флаг «безопасно». Код JavaScript проверяет наличие файла cookie и, если он не существует, создает баннер (с его настройками). Если я ограничусь этим, код будет работать. В частности, баннер отображается в течение семи секунд, а файл cookie создается после его исчезновения, в зависимости от того, какая веб-страница отображается первой.
Тогда на всякий случай, а также из любопытства я хотел еще установить флаг «httponly», но, насколько я понимаю, это нужно делать через php-код, так как код javascript (для проверки наличия куки) не работает, если httponly установлен флаг.
Я пытался создать код PHP для проверки существования файла cookie и его создания, а также код JavaScript для отображения баннера, но этот код, похоже, не работает. В частности, баннер не отображается и файл cookie создается сразу.
Может быть, для этого простого файла cookie мне не нужны оба флага, но, не зная предмета глубоко, я бы предпочитаю перестраховаться.
Первый код – я сообщаю здесь о работающем коде JavaScript (файл CSS для стилизации является внешним):
Код: Выделить всё
document.addEventListener('DOMContentLoaded', function() {
if (!document.cookie.split('; ').find(row => row.trim().startsWith('banner_read='))) {
var banner = document.createElement('div');
banner.id = 'cookie-banner';
banner.className = 'cookie-banner';
banner.innerHTML = '
TEXT HERE
';
document.body.appendChild(banner);
setTimeout(function() {
banner.classList.add('hide');
document.cookie = "banner_read=true; path=/; Secure; SameSite=Strict";
}, 7000); // 7 seconds
}
});
Код: Выделить всё
document.addEventListener('DOMContentLoaded', function() {
var banner = document.createElement('div');
banner.id = 'cookie-banner';
banner.className = 'cookie-banner';
banner.innerHTML = '
TEXT HERE
';
document.body.appendChild(banner);
setTimeout(function() {
banner.classList.add('hide');
}, 7000); // 7 seconds
});
Код: Выделить всё
/* css/custom-cookie-manager.css */
.cookie-banner {
position: fixed;
bottom: 0;
width: 100%;
background-color: #000;
color: #fff;
text-align: center;
height: auto;
z-index: 1000;
font-size: 12px;
display: flex;
align-items: center;
justify-content: center;
padding: 14px 20px 0 20px;
box-sizing: border-box;
}
.cookie-banner.hide {
visibility: hidden;
}
- Куки создаются сразу, еще до исчезновения баннера (а я хочу после его исчезновения )
- Даже если файл cookie установлен, баннер отображается, если пользователь переходит с веб-страницы на домашнюю страницу (example.com/login на example.com). Между другими страницами этого не происходит.
Я попробовал начальную версию отладка с некоторыми сообщениями журнала в коде JavaScript и после установки файла cookie
Код: Выделить всё
// Add the cookie banner
function custom_cookie_manager_banner() {
if (!isset($_COOKIE['banner_read'])) {
?>
document.addEventListener('DOMContentLoaded', function() {
console.log('Document loaded. Adding cookie banner...');
var banner = document.createElement('div');
banner.id = 'cookie-banner';
banner.className = 'cookie-banner';
banner.innerHTML = '
TEXT HERE
';
document.body.appendChild(banner);
console.log('Cookie banner added to the DOM.');
setTimeout(function() {
console.log('Hiding cookie banner...');
banner.classList.add('hide');
}, 7000); // 7 seconds
});
console.log('set cookie..');
Подробнее здесь: [url]https://stackoverflow.com/questions/78812862/create-a-cookie-with-the-secure-and-httonly-flags-to-display-a-banner[/url]