как удалить JQuery cookie на вкладке закрыть - PullRequest
6 голосов
/ 06 февраля 2012

Мой файл cookie работает нормально, я не упоминаю дату, поэтому, когда окно браузера закрывается, файл cookie удаляется.

, но когда я закрываю вкладку в окне браузера, файл cookie не удаляется и открывается тот же сохраненныйСтраница состояния файла cookie при открытии веб-сайта

Как удалить файл cookie, когда пользователь закрывает вкладку «Браузер»?

Ниже приведен мой код

$(document).ready(function(){
var href = $.cookie("activeElementHref");
if(href!==null)
{
setContainerHtml(href);
};

$('nav ul li a').click(function(e){
    e.preventDefault();
    href= $(this).attr('href');
    $.cookie("activeElementHref", href) 
    setContainerHtml(href);
});

}); 
$(window).unload(function() {
$.cookies("activeElementHref",null);
});

function setContainerHtml(href) {
        $.ajax({
        type: "POST",
        url: "baker.php",
        data:{send_txt: href},
        success: function(data){
            $('#aside-right, #intro').css('display','none');
            $('#main-content').fadeOut('10', function (){
            $('#main-content').css('width','700px');
            $('#main-content').css('margin','-30px 0 0 100px');
            $('#main-content').html(data);
            $('#main-content').fadeIn('8000');
            });
        }   
    });
}

Ответы [ 3 ]

6 голосов
/ 06 февраля 2012

Вы должны удалить куки на .unload событие

$(window).unload(function() {
   $.cookies.del('myCookie');
});
4 голосов
/ 28 февраля 2017

В предыдущих ответах предполагается, что ваши куки не помечены как http-only. Если вы хотите предотвратить атаки XSS, вам, вероятно, следует установить файлы cookie только для http, и изменение файлов cookie с помощью javascript не будет работать.

Решение состоит в том, чтобы удалить cookie с сервера, для чего потребуется запрос HTTP, прежде чем вкладка будет закрыта.

Большинство библиотек JS будут использовать асинхронные HTTP-запросы, что приведет к закрытию вкладки до получения просроченного cookie-файла с сервера, поэтому асинхронные вызовы не будут работать надежно.

Единственный способ заставить его работать надежно (по крайней мере, в Chrome) - это сделать синхронный вызов:

window.onbeforeunload = function () {

    var xmlhttp = new XMLHttpRequest();
    xmlhttp.open("POST", "api/logout", false);
    xmlhttp.setRequestHeader("Content-type", "application/json");
    xmlhttp.send();
}

Просто убедитесь, что ваша конечная точка выхода из системы на сервере проста, чтобы ответ был быстрым и пользовательский интерфейс не блокировался слишком долго.

Редактировать: как упоминалось ранее, использование onbeforeunload для уничтожения файлов cookie должно использоваться только в том случае, если это одностраничное приложение.

0 голосов
/ 06 февраля 2012

Вы можете вызвать функцию удаления файлов cookie при событиях onunload и onbeforeunload.

здесь есть функция удаления файлов cookie как удалить файлы cookie в jquery во время закрытия браузера?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...