JavaScript を使用して現在のドメインのすべての Cookie を削除するにはどうすればよいですか?
24 に答える
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
そして、ドメインのすべてのパスとすべてのバリアント (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();
}
}
})();
これに少し不満を感じた後、すべてのパスから名前付きの 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 + ';';
}
}
いつものように、ブラウザーが異なれば動作も異なりますが、これは私にとってはうまくいきました。楽しみ。
私の知る限り、ドメインに設定された Cookie を一括削除する方法はありません。名前がわかっている場合、およびスクリプトが Cookie と同じドメインにある場合は、Cookie をクリアできます。
値を空に設定し、有効期限を過去のどこかに設定できます。
var mydate = new Date();
mydate.setTime(mydate.getTime() - 1);
document.cookie = "username=; expires=" + mydate.toGMTString();
JavaScript を使用した Cookie の操作に関する優れた記事がここにあります。
ここでの2番目の回答とW3Schoolsの両方の影響を受けた回答
document.cookie.split(';').forEach(function(c) {
document.cookie = c.trim().split('=')[0] + '=;' + 'expires=Thu, 01 Jan 1970 00:00:00 UTC;';
});
機能しているようです
編集:スタックオーバーフローがそれらを隣り合わせに置いた方法とほぼ同じです。
編集:明らかに一時的なnvm
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;';
}
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 を消去します。
document.cookie 変数を調べると、リストを取得できます。それらをすべてクリアするには、それらすべてをループして 1 つずつクリアするだけです。
IE と Edge に問題が見つかりました。Webkit ブラウザー (Chrome、safari) はより寛容なようです。Cookie を設定するときは、常に「パス」を何かに設定してください。これは、デフォルトが Cookie を設定したページになるためです。したがって、「パス」を指定せずに別のページで期限切れにしようとすると、パスが一致せず、期限切れになりません。値には Cookieのdocument.cookie
パスや有効期限が表示されないため、値を見て Cookie が設定された場所を特定することはできません。
別のページからの Cookie を期限切れにする必要がある場合は、設定ページのパスを Cookie 値に保存して、後で引き出すか、常に"; path=/;"
Cookie 値に追加できるようにします。その後、どのページからでも有効期限が切れます。