361

JavaScript を使用して現在のドメインのすべての Cookie を削除するにはどうすればよいですか?

4

24 に答える 24

386
function deleteAllCookies() {
    var cookies = document.cookie.split(";");

    for (var i = 0; i < cookies.length; i++) {
        var cookie = cookies[i];
        var eqPos = cookie.indexOf("=");
        var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
        document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
    }
}

このコードには 2 つの制限があることに注意してください。

  • フラグが Javascript の Cookie へのアクセスを無効にするHttpOnlyため、フラグが設定されたCookie は削除されません。HttpOnly
  • 値が設定された Cookie は削除されませんPath。(これらの Cookie は に表示されますが、設定されたのと同じ値をdocument.cookie指定しないと削除できません)。Path
于 2008-10-07T17:27:03.080 に答える
126

そして、ドメインのすべてのパスとすべてのバリアント (www.mydomain.com、mydomain.com など) のすべての Cookie をクリアする方法は次のとおりです。

(function () {
    var cookies = document.cookie.split("; ");
    for (var c = 0; c < cookies.length; c++) {
        var d = window.location.hostname.split(".");
        while (d.length > 0) {
            var cookieBase = encodeURIComponent(cookies[c].split(";")[0].split("=")[0]) + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT; domain=' + d.join('.') + ' ;path=';
            var p = location.pathname.split('/');
            document.cookie = cookieBase + '/';
            while (p.length > 0) {
                document.cookie = cookieBase + p.join('/');
                p.pop();
            };
            d.shift();
        }
    }
})();
于 2015-10-27T10:59:23.060 に答える
78

これに少し不満を感じた後、すべてのパスから名前付きの Cookie を削除しようとするこの関数をまとめました。Cookie ごとにこれを呼び出すだけで、以前よりもすべての Cookie を削除できるようになります。

function eraseCookieFromAllPaths(name) {
    // This function will attempt to remove a cookie from all paths.
    var pathBits = location.pathname.split('/');
    var pathCurrent = ' path=';

    // do a simple pathless delete first.
    document.cookie = name + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT;';

    for (var i = 0; i < pathBits.length; i++) {
        pathCurrent += ((pathCurrent.substr(-1) != '/') ? '/' : '') + pathBits[i];
        document.cookie = name + '=; expires=Thu, 01-Jan-1970 00:00:01 GMT;' + pathCurrent + ';';
    }
}

いつものように、ブラウザーが異なれば動作も異なりますが、これは私にとってはうまくいきました。楽しみ。

于 2011-05-04T16:34:52.880 に答える
10

私の知る限り、ドメインに設定された Cookie を一括削除する方法はありません。名前がわかっている場合、およびスクリプトが Cookie と同じドメインにある場合は、Cookie をクリアできます。

値を空に設定し、有効期限を過去のどこかに設定できます。

var mydate = new Date();
mydate.setTime(mydate.getTime() - 1);
document.cookie = "username=; expires=" + mydate.toGMTString(); 

JavaScript を使用した Cookie の操作に関する優れた記事がここにあります。

于 2008-10-07T16:49:25.120 に答える
10

ここでの2番目の回答とW3Schoolsの両方の影響を受けた回答

document.cookie.split(';').forEach(function(c) {
  document.cookie = c.trim().split('=')[0] + '=;' + 'expires=Thu, 01 Jan 1970 00:00:00 UTC;';
});

機能しているようです

編集:スタックオーバーフローがそれらを隣り合わせに置いた方法とほぼ同じです。

編集:明らかに一時的なnvm

于 2017-05-24T16:52:29.260 に答える
4

Cookie をクリアするためのこの方法を共有したいと考えました。おそらく、ある時点で他の誰かに役立つかもしれません。

var cookie = document.cookie.split(';');

for (var i = 0; i < cookie.length; i++) {

    var chip = cookie[i],
        entry = chip.split("="),
        name = entry[0];

    document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT;';
}
于 2013-07-23T19:28:58.920 に答える
2

JavaScript ですべての Cookie を削除する簡単なコードを次に示します。

function deleteAllCookies(){
   var cookies = document.cookie.split(";");
   for (var i = 0; i < cookies.length; i++)
     deleteCookie(cookies[i].split("=")[0]);
}

function setCookie(name, value, expirydays) {
 var d = new Date();
 d.setTime(d.getTime() + (expirydays*24*60*60*1000));
 var expires = "expires="+ d.toUTCString();
 document.cookie = name + "=" + value + "; " + expires;
}

function deleteCookie(name){
  setCookie(name,"",-1);
}

関数deleteAllCookies()を実行して、すべての Cookie を消去します。

于 2016-07-04T11:55:08.417 に答える
2

document.cookie 変数を調べると、リストを取得できます。それらをすべてクリアするには、それらすべてをループして 1 つずつクリアするだけです。

于 2008-10-07T16:54:27.653 に答える
-1

IE と Edge に問題が見つかりました。Webkit ブラウザー (Chrome、safari) はより寛容なようです。Cookie を設定するときは、常に「パス」を何かに設定してください。これは、デフォルトが Cookie を設定したページになるためです。したがって、「パス」を指定せずに別のページで期限切れにしようとすると、パスが一致せず、期限切れになりません。値には Cookieのdocument.cookieパスや有効期限が表示されないため、値を見て Cookie が設定された場所を特定することはできません。

別のページからの Cookie を期限切れにする必要がある場合は、設定ページのパスを Cookie 値に保存して、後で引き出すか、常に"; path=/;"Cookie 値に追加できるようにします。その後、どのページからでも有効期限が切れます。

于 2016-02-28T08:09:45.877 に答える