8

さて、これが 411 です。Global.asax.cs ファイルに次のイベント ハンドラーがあります。

private void Global_PostRequestHandlerExecute(object sender, EventArgs e)
{
   if (/* logic that determines that this is an ajax call */)
   {
      // we want to set a cookie
      Response.Cookies.Add(new HttpCookie("MyCookie", "true"));
   }
}

そのハンドラーは、Ajax リクエスト中に (私が使用している Ajax フレームワークの結果として) 実行されるだけでなく、他の場合にも実行されます。ここでは、簡潔にするために含めませんでした)。

これは問題なく動作するということだけで十分です。Cookie が設定され、クライアントでそれを読み取ることができ、その時点まではすべて問題ありません。

さて、私を夢中にさせる部分です。

Cookieを削除するために使用しているJavaScript関数は次のとおりです。

function deleteCookie(name) {
   var cookieDate = new Date();
   cookieDate.setTime(cookieDate.getTime() - 1);
   document.cookie = (name + "=; expires=" + cookieDate.toGMTString());
}

したがって、もちろん、Cookie が設定された後のある時点で、次のように削除します。

deleteCookie("MyCookie");

ただ、それだけではうまくいきません。Cookie はまだ存在します。それで、誰かが理由を知っていますか?

4

8 に答える 8

9

Cookie を作成したのと同じパスで Cookie を削除する必要があります。したがって、path=/ で Cookie を作成し、path=/ で削除することもできます。

于 2008-10-02T16:25:06.207 に答える
4
  • クライアント側とサーバー側の Cookie ドメインとパスをチェックして、それらが同じであることを確認しましたか?
  • 1 つの Cookie は安全で、もう 1 つはそうではありませんか?
  • それ以外では、Erlend が示唆するように、サーバー/クライアントのクロック同期の問題が疑われます。
于 2008-09-11T16:05:22.973 に答える
2

使ってみました;expires=Thu, 01-Jan-1970 00:00:01 GMTか?

于 2008-09-11T10:55:36.803 に答える
2

奇妙な..あなたが貼り付けたコードは、これにほとんどそのままです: http://www.quirksmode.org/js/cookies.htmlこれは正常に動作します..

あなたが Ajax を使用していることは知っていますが、それをサーバー側のコードにすばやくノックして、それが機能するかどうかを確認しましたか? これは、それが JS の問題なのか、それとも何か他の問題なのかを判断するのに役立つかもしれません (例: Cookie でのミステリー ファイルのロック)。

アップデート

Google で検索したところ、ブラウザの設定にも問題があるようです。あなたの問題はここのコードではないと思います。他の何かである可能性が高いです。上記を PoC として試すことをお勧めします。そうすれば、そこから移行できます。:)

于 2008-09-11T11:21:42.407 に答える
2

1 週間ほど前に js cookie util をブログに投稿しました。これは、すべての「A グレード」ブラウザで機能しました。

var CookieUtil = {
  createCookie:function(name,value,days) {
    if (days) {
        var date = new Date();
        date.setTime(date.getTime()+(days*24*60*60*1000));
        var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
  },
  readCookie:function(name) {
    var nameEQ = name + "=";
    var ca = document.cookie.split(';');
    for(var i=0;i < ca.length;i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1,c.length);
        if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
    }
    return null;
  },
  eraseCookie:function(name) {
    createCookie(name,"",-1);
  }
};
于 2008-09-11T14:46:01.103 に答える
1

また、作成時に Cookie ドメインが指定された場合は、削除 (期限切れ) するときに Cookie ドメインも指定する必要があることがわかりました。

于 2010-09-15T01:26:13.310 に答える
0

CookieをHttpOnlyに設定するコードがないことは確かですか(上記のものが欠落しているわけではありません)?HttpOnlyプロパティは、(最新の)ブラウザによるCookieの変更を停止します。Robが提案するように、サーバー側でそれを強制終了できるかどうかを確認したいと思います。

于 2008-09-13T07:22:15.990 に答える
0

ブラウザ側でこのjavascriptを呼び出していると思います。どのブラウザを使用していますか? Cookie がまだ残っていることを確認するために、どのように表示していますか?

于 2008-10-02T16:15:00.197 に答える