我的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');
});
}
});
}
答案 0 :(得分:6)
您必须删除.unload
事件
$(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?