Как удалить все файлы cookie для текущего домена с помощью JavaScript?
Очистка всех файлов cookie с помощью JavaScript
Ответ 1
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";
}
}
Обратите внимание, что этот код имеет два ограничения:
- Он не будет удалять файлы cookie с установленным флагом
HttpOnly
, поскольку флагHttpOnly
отключает доступ к файлу cookie Javascript. - Он не будет удалять файлы cookie, которые были установлены с помощью значения
Path
. (Это несмотря на то, что эти файлы cookie будут отображаться вdocument.cookie
, но вы не можете удалить его, не указав одно и то же значениеPath
, с которым оно было установлено.)
Ответ 2
Один вкладыш
Если вы хотите быстро вставить его...
document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); });
И код для букмарклета:
javascript:(function(){document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); }); })();
Ответ 3
После небольшого разочарования этим я сбил эту функцию, которая попытается удалить именованный файл 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 + ';';
}
}
Как всегда, разные браузеры имеют другое поведение, но это сработало для меня. Наслаждайтесь.
Ответ 4
Если у вас есть доступ к плагину jquery.cookie, вы можете стереть все файлы cookie таким образом:
for (var it in $.cookie()) $.removeCookie(it);
Ответ 5
И здесь один, чтобы очистить все файлы cookie во всех путях и во всех вариантах домена (www.mydomain.com, mydomain.com и т.д.):
(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();
}
}
})();
Ответ 6
Насколько я знаю, нет способа сделать полное удаление любого набора cookie в домене. Вы можете очистить файл cookie, если знаете имя, и script находится в том же домене, что и файл cookie.
Вы можете установить значение пустым и дату истечения срока годности где-то в прошлом:
var mydate = new Date();
mydate.setTime(mydate.getTime() - 1);
document.cookie = "username=; expires=" + mydate.toGMTString();
Здесь отличная статья здесь о манипулировании файлами cookie с помощью javascript.
Ответ 7
Simpler. Быстрее.
function deleteAllCookies() {
var c = document.cookie.split("; ");
for (i in c)
document.cookie =/^[^=]+/.exec(c[i])[0]+"=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
}
Ответ 8
Понятно, что я бы поделился этим методом для очистки куки. Возможно, это может быть полезно для кого-то еще в какой-то момент.
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;';
}
Ответ 9
Ответ под влиянием обоих вторых ответов здесь и W3Schools
document.cookie.split(';').forEach(function(c) {
document.cookie = c.trim().split('=')[0] + '=;' + 'expires=Thu, 01 Jan 1970 00:00:00 UTC;';
});
Кажется, работает
edit: wow почти точно так же, как Zach интересно, как Qaru ставит их рядом друг с другом.
edit: nvm, который был временным, по-видимому,
Ответ 10
Вы можете получить список, просмотрев переменную document.cookie. Очистка их - это всего лишь переплетение всех них и очистка их по одному.
Ответ 11
Вот простой код удалить все файлы cookie в JavaScript.
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.
Ответ 12
Функциональный подход + ES6
const cookieCleaner = () => {
return document.cookie.split(";").reduce(function (acc, cookie) {
const eqPos = cookie.indexOf("=");
const cleanCookie = `${cookie.substr(0, eqPos)}=;expires=Thu, 01 Jan 1970 00:00:00 GMT;`;
return `${acc}${cleanCookie}`;
}, "");
}
Примечание. Не обрабатывает пути
Ответ 13
//Delete all cookies
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:01 GMT;' +
'path=' + '/;' +
'domain=' + window.location.host + ';' +
'secure=;';
}
}
Ответ 14
После тестирования почти всех методов, перечисленных в нескольких стилях браузеров на нескольких стилях файлов cookie, я почти ничего не нашел здесь, даже 50%.
Пожалуйста, помогите исправить по необходимости, но я собираюсь бросить здесь 2 цента. Следующий метод разрушает все и в основном создает строку значений cookie на основе как частей настроек, так и включает поэтапную сборку строки пути, начиная с /
, конечно.
Надеюсь, это поможет другим, и я надеюсь, что любая критика может прийти в форме совершенствования этого метода. Сначала мне нужен простой 1-лайнер, как искали некоторые другие, но куки JS - одна из тех вещей, которые не так легко справляются.
;(function() {
if (!window['deleteAllCookies'] && document['cookie']) {
window.deleteAllCookies = function(showLog) {
var arrCookies = document.cookie.split(';'),
arrPaths = location.pathname.replace(/^\//, '').split('/'), // remove leading '/' and split any existing paths
arrTemplate = [ 'expires=Thu, 01-Jan-1970 00:00:01 GMT', 'path={path}', 'domain=' + window.location.host, 'secure=' ]; // array of cookie settings in order tested and found most useful in establishing a "delete"
for (var i in arrCookies) {
var strCookie = arrCookies[i];
if (typeof strCookie == 'string' && strCookie.indexOf('=') >= 0) {
var strName = strCookie.split('=')[0]; // the cookie name
for (var j=1;j<=arrTemplate.length;j++) {
if (document.cookie.indexOf(strName) < 0) break; // if this is true, then the cookie no longer exist
else {
var strValue = strName + '=; ' + arrTemplate.slice(0, j).join('; ') + ';'; // made using the temp array of settings, putting it together piece by piece as loop rolls on
if (j == 1) document.cookie = strValue;
else {
for (var k=0;k<=arrPaths.length;k++) {
if (document.cookie.indexOf(strName) < 0) break; // if this is true, then the cookie no longer exist
else {
var strPath = arrPaths.slice(0, k).join('/') + '/'; // builds path line
strValue = strValue.replace('{path}', strPath);
document.cookie = strValue;
}
}
}
}
}
}
}
showLog && window['console'] && console.info && console.info("\n\tCookies Have Been Deleted!\n\tdocument.cookie = \"" + document.cookie + "\"\n");
return document.cookie;
}
}
})();
Ответ 15
Jquery:
var cookies = $.cookie();
for(var cookie in cookies) {
$.removeCookie(cookie);
}
ваниль JS
function clearListCookies()
{
var cookies = document.cookie.split(";");
for (var i = 0; i < cookies.length; i++)
{
var spcook = cookies[i].split("=");
deleteCookie(spcook[0]);
}
function deleteCookie(cookiename)
{
var d = new Date();
d.setDate(d.getDate() - 1);
var expires = ";expires="+d;
var name=cookiename;
//alert(name);
var value="";
document.cookie = name + "=" + value + expires + "; path=/acc/html";
}
window.location = ""; // TO REFRESH THE PAGE
}
Ответ 16
Я нашел проблему в IE и Edge. Браузеры Webkit (Chrome, safari) кажутся более прощающими. При настройке файлов cookie всегда устанавливайте "путь" на что-то, потому что по умолчанию будет страница, в которой установлен файл cookie. Поэтому, если вы попытаетесь закончить его на другой странице, не указав "путь", путь не будет соответствовать, и он не истечет. Значение document.cookie
не показывает путь или срок действия файла cookie, поэтому вы не можете определить, где был установлен файл cookie, посмотрев на значение.
Если вам нужно выпустить файлы cookie с разных страниц, сохраните путь к странице настроек в файле cookie, чтобы вы могли вытащить ее позже или всегда добавить "; path=/;"
в значение cookie. Затем он истечет с любой страницы.