2012-04-18 71 views
2

我正在嘗試遵守新的歐盟法律的cookie立法,並且需要在用戶同意之前刪除我網站上的所有cookie。目前我使用的成功以下內容:使cookie過期

function deleteAllCookies() { 
    var cookies = document.cookie.split(";"); 

    for (var i = 0; i < cookies.length; i++) { 
     var cookie = cookies[i]; 
     var eqPos = cookie.indexOf("="); 
     var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie; 
     document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT"; 
    } 
} 

然而,一旦這個過程中運行還是有一個名爲ASP.NET_SessionID的cookie是由ASP.NET創建。爲了克服這個問題我設置基本上存儲會話ID在URL中的web.config文件中的以下內容:

<sessionState regenerateExpiredSessionId="true" cookieless="true" /> 

我的問題是,當我設置cookie的=「真」的使用JavasScript上面的代碼不會刪除我的任何餅乾,就像它變得多餘。當我設置cookieless =「false」時,javascript完美地工作。是否還有其他設置需要更改才能使兩者協同工作?

感謝

+1

這個cookie在關閉瀏覽器或所有頁面時會自動刪除,因爲是會話cookie(它僅適用於當前會話)。所以不要擔心。您可以設置會話狀態cookie到期的時間。 – Aristos 2012-04-18 13:53:28

回答

1

如果不需要會話,你可以禁用SessionState的(模式=「關」)

而且,我平時清理餅乾服務器端,像這樣(從不看它是否雖然刪除了asp.net sessionid):

protected void Page_Load(object sender, EventArgs e) 
{ 
    Response.BufferOutput = true; 
    Session.Abandon(); 
    HttpCookieCollection cookies = Request.Cookies; 
    var cookiesList = new List<String>(); 
    foreach (String cookieKey in cookies) 
     cookiesList.Add(cookieKey); 

    foreach (var cookieKey in cookiesList) 
    { 
    var cookie = new HttpCookie(cookieKey); 
    cookie.Expires = DateTime.Now.AddDays(-1d); 
    Response.Cookies.Add(cookie); 
    } 
} 

希望這可以提供幫助。

+0

完美,我使用的.net代碼似乎沒有工作,但你的確出於某種原因。謝謝 – mjroodt 2012-04-18 14:33:03

+0

很高興我能幫到你。 順便說一句:出於安全原因,會話cookie通常是「HttpOnly」,它阻止了來自客戶端(Java)腳本的訪問。這可能是你無法通過js清理它的原因。 – jbl 2012-04-18 14:40:18