ASP.NETWebサイトでCookieを削除する方法


87

私のウェブサイトでは、ユーザーが[ログアウト]ボタンをクリックすると、Logout.aspxページにコードが読み込まれますSession.Clear()

ASP.NET/C#では、これによりすべてのCookieがクリアされますか?または、私のWebサイトのすべてのCookieを削除するために追加する必要のある他のコードはありますか?

回答:


149

そのようなことを試してください:

if (Request.Cookies["userId"] != null)
{
    Response.Cookies["userId"].Expires = DateTime.Now.AddDays(-1);   
}

しかし、使用することも理にかなっています

Session.Abandon();

それに加えて、多くのシナリオで。


15
Session.AbandonASP.NETセッションCookieはクリアされますが、ここのuserIDのように手動で設定したCookieはクリアされません。そしてCookies["whatever"]、決してnullではありません。存在しないCookieを要求すると、フレームワークはCookieを作成します。
アンドマール2011

11
@AndomarはCookies["whatever"]、Cookieが存在しない場合、実際にはnullを返します。私はこれが古いコメントであることを知っていますが、他の読者がこのコメントに誤解されてほしくないです。
ヌーノアガピート2014

6
Expires設定しないことも非常に重要です。DateTime.MinValueこれにより、実際にCookieにセッションの有効期限が与えられます。つまり、ブラウザ/タブ(ブラウザに依存)が閉じられるまで待機してからCookieを削除します。
ナシェナス2015年

7
@NunoAgapito非常に古いですが、他のユーザーの場合、Cookies ["whatever"]は、「Request」から読み取るとnullを返し、「Response」から読み取ると空のCookieを返します。
Athiwat Chunlakhan 2016

しかし、これはCookieからコンテンツを削除するだけであり、少なくとも私にとってはCookieはブラウザに残ります
Beingnin 2017年

50

いいえ、Cookieは、それぞれに有効期限設定することによってのみクリーンアップできます。

if (Request.Cookies["UserSettings"] != null)
{
    HttpCookie myCookie = new HttpCookie("UserSettings");
    myCookie.Expires = DateTime.Now.AddDays(-1d);
    Response.Cookies.Add(myCookie);
}

現時点でSession.Clear()

  • Sessionコレクションからすべてのキーと値のペアが削除されます。Session_Endイベントは発生しません。

あなたはログアウト時に、このメソッドを使用する場合は、使用する必要がありますSession.Abandonにメソッドを Session_Endイベント:

  • セッションIDを持つCookie(アプリケーションがセッションIDストアにCookieを使用している場合(デフォルト))は削除されます

賞味期限についてですが、if実際には機能しないと思います。Cookies["whatever"]フレームワークでCookieを要求すると、Cookieが存在しない場合は作成されます。
アンドマール2011

@AndomarこのコードはMSDNから入手しました。Requestオブジェクトを呼び出すとCookieが作成されるとは思いません。
VMAtm 2011

2
ああ、それはResponseオブジェクトのクッキーを作成するだけのようです。興味深い:)
Andomar 2011

3
このコードは1行で最適化できますResponse.Cookies["UserSettings"].Expires = DateTime.Now.AddDays(-1)。ここで、サーバーはブラウザにCookieの削除を要求します。存在する場合、ブラウザはそれを削除します。
shashwat 2013

2
ええ、私にとってはResponse.Cookies.Add(myCookie)の部分が必要でした。それがないと、常に/正しく機能するとは限りません。ありがとう。
クリストファーD.エマーソン

28

これは私が使用するものです:

    private void ExpireAllCookies()
    {
        if (HttpContext.Current != null)
        {
            int cookieCount = HttpContext.Current.Request.Cookies.Count;
            for (var i = 0; i < cookieCount; i++)
            {
                var cookie = HttpContext.Current.Request.Cookies[i];
                if (cookie != null)
                {
                    var expiredCookie = new HttpCookie(cookie.Name) {
                        Expires = DateTime.Now.AddDays(-1),
                        Domain = cookie.Domain
                    };
                    HttpContext.Current.Response.Cookies.Add(expiredCookie); // overwrite it
                }
            }

            // clear cookies server side
            HttpContext.Current.Request.Cookies.Clear();
        }
    }

本当にありがとう!また、Cookieがサーバー側を更新しないという私の問題を取り除きました
Tom elSafadi19年

11

残念ながら、私にとって、「有効期限」の設定は常に機能するとは限りませんでした。クッキーは影響を受けませんでした。

このコードは私のために働きました:

HttpContext.Current.Session.Abandon();
HttpContext.Current.Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

どこ"ASP.NET_SessionId"クッキーの名前です。これは実際にはCookieを削除しませんが、私にとって十分に近い空白のCookieで上書きします。


5

他の人が言ったように、Session.Abandonを使用してもSession IDcookieは削除されないことを指摘したいと思います。

セッションを放棄しても、セッションIDCookieはユーザーのブラウザから削除されません。したがって、セッションが破棄されるとすぐに、同じアプリケーションへの新しいリクエストは同じセッションIDを使用しますが、新しいセッション状態インスタンスがあります。同時に、ユーザーが同じDNSドメイン内で別のアプリケーションを開いた場合、1つのアプリケーションからAbandonメソッドが呼び出された後、ユーザーはセッション状態を失うことはありません。

セッションIDを再利用したくない場合があります。そうして、セッションIDを再利用しないことの影響を理解している場合は、次のコード例を使用してセッションを破棄し、セッションIDCookieをクリアします。

Session.Abandon();
Response.Cookies.Add(new HttpCookie("ASP.NET_SessionId", ""));

このコード例は、サーバーからセッション状態をクリアし、セッション状態cookieをnullに設定します。null値は、ブラウザからCookieを効果的にクリアします。

http://support.microsoft.com/kb/899918


5

今は2018年なので、ASP.NET Coreには、単純な組み込み関数があります。Cookieを削除するには、次のコードを試してください。

if(Request.Cookies["aa"] != null)
{
    Response.Cookies.Delete("aa");
}
return View();

4

パスワードをCookieとして保存しないでください。Cookieを削除するには、実際にはCookieを変更して期限切れにする必要があります。実際に削除することはできません。つまり、ユーザーのディスクから削除することはできません。

サンプルは次のとおりです。

HttpCookie aCookie;
    string cookieName;
    int limit = Request.Cookies.Count;
    for (int i=0; i<limit; i++)
    {
        cookieName = Request.Cookies[i].Name;
        aCookie = new HttpCookie(cookieName);
        aCookie.Expires = DateTime.Now.AddDays(-1); // make it expire yesterday
        Response.Cookies.Add(aCookie); // overwrite it
    }

2

OPの質問タイトルをすべてのCookieの削除と見なす-「WebサイトのCookieを削除する」

WebのどこかでDaveDomagalaのコードに出くわしました。私はDaveを編集して、Google AnalyticsのCookieも許可しました。これにより、Webサイトで見つかったすべてのCookieがループされ、すべて削除されました。(開発者の観点から-新しいコードを既存のサイトに更新することは、ユーザーがサイトに再度アクセスする際の問題を回避するための良い方法です)。

以下のコードを、最初にCookieを読み取り、必要なデータを保持することと並行して使用します。次に、以下のループですべてをきれいに洗浄した後、Cookieをリセットします。

コード:

int limit = Request.Cookies.Count; //Get the number of cookies and 
                                   //use that as the limit.
HttpCookie aCookie;   //Instantiate a cookie placeholder
string cookieName;   

//Loop through the cookies
for(int i = 0; i < limit; i++)
{
 cookieName = Request.Cookies[i].Name;    //get the name of the current cookie
 aCookie = new HttpCookie(cookieName);    //create a new cookie with the same
                                          // name as the one you're deleting
 aCookie.Value = "";    //set a blank value to the cookie 
 aCookie.Expires = DateTime.Now.AddDays(-1);    //Setting the expiration date
                                                //in the past deletes the cookie

 Response.Cookies.Add(aCookie);    //Set the cookie to delete it.
}

追加:GoogleAnalyticsを使用する場合

上記のループ/削除はサイトのすべてのCookieを削除するため、Google Analyticsを使用する場合は、__ utmz Cookieを保持すると、訪問者のアクセス元、使用された検索エンジン、内容を追跡できるので便利です。リンクがクリックされた、使用されたキーワード、およびWebサイトにアクセスしたときの世界のどこにあったか。

したがって、それを維持するには、Cookie名がわかったら、単純なifステートメントをラップします。

... 
aCookie = new HttpCookie(cookieName);    
if (aCookie.Name != "__utmz")
{
    aCookie.Value = "";    //set a blank value to the cookie 
    aCookie.Expires = DateTime.Now.AddDays(-1);   

    HttpContext.Current.Response.Cookies.Add(aCookie);    
}

1

これは古いスレッドですが、誰かがまだ解決策を探しているのではないかと思いました。

HttpCookie mycookie = new HttpCookie("aa");
mycookie.Expires = DateTime.Now.AddDays(-1d);
Response.Cookies.Add(mycookie1);

それが私にとってのトリックでした。



0

Cookieを削除するには、有効期限を設定する必要があります

Request.Cookies[yourCookie]?.Expires.Equals(DateTime.Now.AddYears(-1));

Cookieが存在しない場合、これは例外をスローしません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.