1

マシンキーを変更した後、同じサブドメインにとどまった後、ASP.NET で Cookie を削除する方法は?

現在、example.domain.com に Cookie がありますが、cookie が foo.domain.com でも機能するように、ワイルドカード Cookie (.domain.com) に移行する必要があります。これを行うために、asp.net ログイン Cookie を暗号化/復号化するマシン キーを手動で設定しました。問題は、古い Cookie を既に持っているユーザーが、サイトにアクセスしようとすると (何らかの理由で古い Cookie を復号化しようとするため)、CryptographicException を受け取ることです。Cookie の名前を変更しましたが、役に立ちませんでした - それでもエラーが発生します。そこで、古い Cookie をすべて削除することにしました。次のコードを使用して、ログイン サイトでこれを実行しようとします。

var myCookies = Request.Cookies.AllKeys;
foreach (var cookieName in myCookies)
{
    var cookie = Request.Cookies[cookieName];
    if (cookie == null) continue;
    cookie.Value = "written " + DateTime.Now;
    cookie.Expires = DateTime.Now.AddYears(-1);
    cookie.Domain = "example.domain.com"
    Response.Cookies.Add(cookie);
}

コードに到達して実行されますが、Google Chrome リソースを調べると、Cookie がまだ残っています。したがって、明らかに削除は機能しませんでした。いくつかの異なる方法を試しました (path ="/" を追加する、cookie.Value を cookie.Value に設定するなど)。何らかの奇妙な理由で Cookie がまだ残っており、それらを削除することはできません。

元の質問に戻ると、Cookie でワイルドカード ドメインに変更し、web.config でマシン キーを明示的に指定した後、ASP.NET MVC 4.5 で Cookie を削除するにはどうすればよいでしょうか。

4

2 に答える 2

1

cookie.Domain を削除することで、Cookie を削除できたことがわかりました。これは、Cookie を上書きするには、置き換える Cookie を追加するときにできるだけ具体的にする必要があるという事実と関係があると考えています。domain も path も指定せずに以前の Cookie が追加されたため、これが最も具体的です。

したがって、このシナリオで動作するようになったコードは次のとおりです。

var myCookies = Request.Cookies.AllKeys;
foreach (var cookieName in myCookies)
{
    var cookie = Request.Cookies[cookieName];
    if (cookie == null) continue;
    cookie.Value = "written " + DateTime.Now;
    cookie.Expires = DateTime.Now.AddYears(-1);
    Response.Cookies.Add(cookie);
}
于 2015-07-07T22:02:38.160 に答える