2

私はCookieに関する新しいEU法に準拠しようとしていますが、ユーザーが同意する前に、サイト上のすべての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によって作成されたASP.NET_SessionIDと呼ばれるCookieが残ります。これを克服するために、基本的にセッションIDをURLに格納するweb.configファイルに次のように設定します。

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

私が抱えている問題は、cookieless = "true"を設定すると、上記のjavasscriptコードがCookieを削除しなくなり、冗長になるようになることです。cookieless = "false"を設定すると、JavaScriptは完全に機能します。両方を連携させるために変更する必要のある他の設定はありますか?

ありがとう

4

1 に答える 1

1

セッションが必要ない場合は、sessionstateを無効にすることができます(mode = "Off")

また、私は通常、次のようにサーバー側のCookieをクリーンアップします(ただし、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);
    }
}

これがお役に立てば幸いです。

于 2012-04-18T13:55:12.590 に答える