7

Cookieを削除しようとしていますが、削除されません。これが私が使おうとしているコードです。

if (Request.Cookies["dcart"] != null)
{
    Response.Write(Request.Cookies["dcart"].Expires);
    // Response 1/1/0001 12:00:00 AM

    Response.Write(Request.Cookies["dcart"].Value);
    // Response 229884

    HttpCookie myCookie = new HttpCookie("dcart");
    myCookie.Expires = DateTime.Now.AddDays(-1d);
    myCookie.Value = "";
    Response.Cookies.Add(myCookie);
}

Response.Write(Request.Cookies["dcart"].Expires);
// Response 1/1/0001 12:00:00 AM
Response.Write(Request.Cookies["dcart"].Value);
// Response 229884

再度Cookieを取得しても、何も変わりません。FireFoxとChromeの同じ動作を確認します。興味深い点は、有効期限がブラウザでは正しく表示されますが、コードでは表示されることです。

以下を試してみましたが、うまくいきませんでした。

  • 有効期限を(明日)に設定し、再度昨日に設定します。
  • ブラウザを再起動します(さまざまなブラウザやユーザーが発生します)
  • 値を設定する
  • HttpContext.Current.Request.Cookies["dcart"]...を使用します。
  • Request.Cookies["dcart"]。Expires=DateTime.Now.AddYears(-10);

PS。Cookieがないため、コードはマシン上で直接機能しません。

4

3 に答える 3

5

解決済み

問題は道だった。私が要求したCookieは「/store」パスの下にあり、私が応答したCookieは「/」へのパス情報でした。

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

パス情報を追加すると削除されます。

注:Firebugを使用してCookieパスをトレースしました。

于 2012-12-07T00:21:41.823 に答える
0

クッキーは見た目よりもトリッキーです。クッキーの使用方法の明確な説明については、これをお読みください。

クッキーのお手入れと取り扱いについて

リンクされた記事によると、Cookieを削除するには、有効期限を過去の任意の時点に設定する必要がありますが、一部のブラウザーはその日付を正しく処理しないため、DateTime.MinValueを使用しないでください。

クライアントマシンでCookieを削除する場合は、クライアントのCookieを上書きしないようにCookieに指示するだけの明白なResponse.Cookies.Remove( "MyCookie")を使用しないでください(詳細な説明については、以下を参照してください)。 cookieのExpiresプロパティは、現在の時刻より前の任意の時点になります。これにより、現在のCookieを期限切れのCookieで上書きするようにクライアントに指示され、クライアントはそれをサーバーに送り返すことはありません。

繰り返しますが、誘惑はDateTime.MinValue(01-Jan-0001 00:00:00)を使用してCookieを削除することです。繰り返しますが、これは間違いです。今回は、Netscape 7は期待どおりに機能しますが、InternetExplorer6はこれを例外的なケースと見なしています。Internet Explorerが「空白」の有効期限と見なされるCookieを受信した場合、ブラウザが閉じられてから有効期限が切れるまでCookieを保持します。

DateTime.Now.AddYears(-30)の有効期限を使用してCookieを削除する最も安全な(そして最も対称的な)方法。

つまり、正しい方法は

Request.Cookies["dcart"].Expires = DateTime.Now.AddYears(-30);
于 2012-12-06T23:42:01.157 に答える
0

このリンクはあなたにいくつかの答えを提供します:

https://msdn.microsoft.com/en-us/library/ms178195.aspx

私の場合、ローカルホストで動作しましたが、サーバーにデプロイすると問題が解決しませんでした...

HttpCookie、ExpireパラメータDateTime.Now.AddDays(-1d)を設定して(有効期限を昨日に設定)、プロパティを設定してみてくださいSecure = false

この後、私のために働いた。

于 2017-02-01T22:14:43.580 に答える