2012-04-18 69 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