2012-08-24 4 views
23

から可能な重複をクッキーを削除する方法:
Delete cookie on clicking sign outネット

私はときに、ユーザーのログアウトクッキーを削除したい

は、ここに私のコードです:

if (HttpContext.Current.Request.Cookies["currentUser"] != null) 
{ 
    DeleteCookie(HttpContext.Current.Request.Cookies["currentUser"]); 
} 


     public void DeleteCookie(HttpCookie httpCookie) 
     { 
      try 
      { 
       httpCookie.Value = null; 
       httpCookie.Expires = DateTime.Now.AddMinutes(-20); 
       HttpContext.Current.Request.Cookies.Add(httpCookie); 
      } 
      catch (Exception ex) 
      { 
       throw (ex); 
      } 
     } 

しかし、それは動作しません。提案はありますか?

+0

私はあなたが 'Value'をクリアすべきではないと信じています。 AFAIK、クッキーの特定方法 –

+0

クッキーの削除はセカンダリクリーンアップに過ぎないことに注意してください。重要な部分は、サーバー側のCookieの値を無効にすることです。 – CodesInChaos

答えて

48
HttpCookie currentUserCookie = HttpContext.Current.Request.Cookies["currentUser"]; 
HttpContext.Current.Response.Cookies.Remove("currentUser"); 
currentUserCookie.Expires = DateTime.Now.AddDays(-10); 
currentUserCookie.Value = null; 
HttpContext.Current.Response.SetCookie(currentUserCookie); 

これは機能します。

+1

これは古い答えですが、初心者の方には、後でもう一度設定されるため、クッキーを削除すると便利なことはありません。 –

0

代わりにHttpContext.Current.Response.Cookiesコレクションにクッキー(過去期限付き)を追加します。リクエストは、サーバーが送信されたクッキーを読み取るためのものです。レスポンスは、クッキーをクライアントに送り返すためのものです。

14

の代わりにクッキーを追加するには、過去の値にResponse'sクッキーExpiresを変更する必要があります。

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

追記:代わりにthrow exのあなただけthrowそれはスタックトレースです保つために必要があります。 C#: Throwing Custom Exception Best Practices

+0

何も行われていないと、なぜ例外をキャッチしますか? – Dykam

+0

私はしようとしたが動作しません。それでもログアウト後にユーザー名が表示されます。 httpCookie.Expires = DateTime.Now.AddDays(-1); – cagin

+0

@Dykam:後でログに記録したり、何でもしたいと思うことができます。私はしばしば最初のバージョンで 'TODO:implement logging'を追加します。このように、少なくともtry/catchを追加して例外が発生する可能性があることを覚えておいてください。 –

0

多分Response.Cookies.Clear()またはResponse.Cookies.Remove()を利用できます。

+0

動作しません。 – cagin

+1

申し訳ありません...私はクイック検索を行い、これを見つけましたhttp://msdn.microsoft.com/en-us/library/ms178195.aspx これはあなたにとって役に立つかもしれません。 –

+0

私の質問でわかるように、私はすでにクッキーの有効期限を過去に設定しました。しかし、同じ結果。 – cagin