2012-02-06 64 views
3

我的cookie工作正常我沒有提及日期,所以當瀏覽器窗口關閉時,cookie被刪除。如何刪除選項卡上的jQuery 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'); 
      }); 
     } 
    }); 
} 
+1

的可能重複:http://stackoverflow.com/questions/805895/how-come-closing-a-tab-doesnt-close-a-session-cookie – 2012-02-06 09:31:53

+0

你有沒有發現一個解決方案?我有同樣的問題,我只需要在選項卡關閉刪除cookie,而不是頁面刷新 – Jeff 2016-05-25 14:06:05

回答

5

您必須刪除.unload事件

$(window).unload(function() { 
    $.cookies.del('myCookie'); 
}); 
+0

我添加了Window.unload事件,但是當我刷新時,窗口被卸載並且cookie被刪除甚至不保存狀態 – Bandayar 2012-02-06 09:51:30

+1

刷新頁面也首先卸載頁面。 – Yorgo 2012-02-06 10:11:25

+2

卸載事件甚至會在頁面刷新時刪除該Cookie,因爲我已經設置了Cookie – Bandayar 2012-02-06 10:22:13

1

前面的回答假設你的Cookie不會標記爲僅HTTP的餅乾。如果你想防止XSS攻擊,你可能應該把你的cookie設置爲僅限http,並且通過javascript更改cookie不起作用。

解決的辦法是從服務器上刪除cookie,在關閉標籤之前需要一個HTTP請求。

大多數JS庫都會使用異步HTTP請求,這會導致在從服務器接收到過期的cookie之前關閉標籤,因此異步調用將無法可靠地工作。

,我是能夠使它(至少在鉻)可靠工作的唯一途徑是通過進行同步調用:

window.onbeforeunload = function() { 

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

只是一定要保持你的註銷端點服務器簡單所以響應速度很快,並且用戶界面不會被阻止太久。

編輯:如前所述,只能使用onbeforeunload來殺死cookie,如果它是單頁應用程序。