#javascript #jquery #cookies #js-cookie
#javascript #jquery #файлы cookie #js-cookie
Вопрос:
Я использую jscookie для назначения пользователям cookie после запуска всплывающего окна, чтобы гарантировать, что они не увидят его снова в течение 7 дней. Мой код приведен ниже.
На обеих страницах функция ищет всплывающий cookie. Если cookie там нет, запускается всплывающее окно и назначается cookie. Обе эти функции работают корректно.
Вот в чем проблема:
При посещении пользователем page A
сработает всплывающее окно, и ему будет присвоен cookie. Затем, если пользователь переходит на page B
, у него все еще есть cookie, и всплывающее окно не будет запущено.
Однако, если пользователь посетит страницу page B
первым, будет запущено всплывающее окно и будет назначен cookie. Но если пользователь затем переходит на page A
, cookie больше не отображается в списке cookie. page A
сработает всплывающее окно, и cookie будет назначен.
Вот в чем загвоздка. Если я вернусь на страницу B, я увижу, что у меня есть два одинаковых cookie. Единственное отличие заключается в path
. Один popup_cookie
со страницы A и другой со страницы B.
Пример:
Name Value Domain Path
popup_cookie true mydomain.com /page-a
popup_cookie true mydomain.com /page-b
Вопрос:
Итак, почему пользователь сохраняет cookie при переходе от page A
к page B
, но не от page B
к page A
? Как вы можете видеть ниже, cookie назначается одинаковым образом в обоих случаях.
////Page A Popup
// Checks for popup cookie
if (Cookies.get('popup_cookie') == 'true') {
// Do nothing
} else if ($('#form').length) {
$('#form').appendTo('#page-a-popup-container');
$('body').on('mouseleave',function () {
if ($('#other-element').hasClass('visible')) {
// Do nothing
} else {
$('#page-a-popup-container').css('display', 'grid');
$('#popup-bg').fadeIn();
Cookies.set('popup_cookie', true, {expires: 7, path: ''});
$('body').off('mouseleave');
}
});
// Pop-up Close Button
$('#page-a-popup-close').click(function () {
$('#page-a-popup-container').hide();
$('#popup-bg').hide();
});
}
//// Page B Popup
// Checks for popup cookie
if (Cookies.get('popup_cookie') == 'true') {
// Do nothing
} else if ($('#form').length) {
$('#form').appendTo('#plan-b-popup-container');
$('body').on('mouseleave',function () {
if ($('#drip-header-119587').hasClass('drip-hidden')) {
// Do nothing
} else {
$('#plan-b-popup-container').css('display', 'grid');
$('#popup-bg').fadeIn();
Cookies.set('popup_cookie', true, {expires: 7, path: ''});
$('body').off('mouseleave');
}
});
// Pop-up Close Button
$('#plan-b-popup-close').click(function () {
$('#plan-b-popup-container').hide();
$('#popup-bg').hide();
});
}
Комментарии:
1. Я не уверен, что понимаю, о чем вы спрашиваете. Я тестирую это сам.
Ответ №1:
Опасность. Конечно, я понял это сразу после того, как потратил все это время на этот пост : (
Все, что мне нужно было сделать, это указать путь к cookie path: '/'
в обеих функциях. Таким образом, cookie, назначенный на внутренней странице, сохраняется на каждой странице.
По-видимому, путь определяет, где активен cookie.