如何在tab关闭上删除jquery cookie

时间:2012-02-06 09:29:42

标签: javascript jquery cookies

我的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 个答案:

答案 0 :(得分:6)

您必须删除.unload事件

上的Cookie
$(window).unload(function() {
   $.cookies.del('myCookie');
});

答案 1 :(得分:4)

之前的答案假设您的Cookie未标记为仅限http。如果您想防止XSS攻击,您应该将您的cookie设置为仅限http,并且通过javascript更改cookie将不起作用。

解决方案是从服务器中删除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();
}

只需确保将服务器中的Logout端点保持简单,以便响应速度快,并且UI不会被阻止太长时间。

编辑:如前所述,只有在单页应用程序中使用onbeforeunload才能杀死cookie。

答案 2 :(得分:0)

你可以在onunload&上调用删除cookie功能。 onbeforeunload events。

删除Cookie的功能在how to delete cookie in jquery at the time of browser closing?