Пользователь не сохраняет cookie, когда покидает страницу

#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.