web-dev-qa-db-ja.com

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

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

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

77
lock

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

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

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

Session.Abandon();

他にも多くのシナリオで。

131
Kirill

いいえ、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を使用している場合(デフォルト))は削除されます
44
VMAtm

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

    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();
        }
    }
26
pixelbits

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

このコードは私のために働いた:

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

ここで、"ASP.NET_SessionId"はCookieの名前です。これは実際にはCookieを削除しませんが、空のCookieで上書きします。

10
Buh Buh

他の人が言ったように、Session.Abandonを使用する場合、セッションID Cookieは削除されないことを指摘したいだけです。

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

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

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

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

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

4
MTs

パスワードを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
    }
3

現在は2018年であるため、ASP.NET Coreには、簡単な機能が組み込まれています。 Cookieを削除するには、次のコードを試してください。

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

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

ウェブ上のどこかでDave Domagalaのコードに出会いました。 Google AnalyticsのCookieも許可するようにDaveを編集しました-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.
}

追加:Google Analyticsを使用する場合

上記のループ/削除は、サイトのすべてのCookieを削除します。したがって、Googleアナリティクスを使用する場合は、__ utmz Cookieを保持しておくと便利です。リンクがクリックされたキーワード、使用されたキーワード、ウェブサイトにアクセスしたときに世界のどこにいたのか。

そのため、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);    
}

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

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

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

1
Ahsan

Response.Cookies ["UserSettings"]。Expires = DateTime.Now.AddDays(-1)

0
Noman Chali