Respuestas:
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";
}
}
Tenga en cuenta que este código tiene dos limitaciones:
HttpOnly
marca establecida, ya que la HttpOnly
bandera deshabilita el acceso de Javascript a la cookie.Path
valor. (Esto a pesar del hecho de que esas cookies aparecerán document.cookie
, pero no puede eliminarlas sin especificar el mismo Path
valor con el que se configuró).trim()
espacio adicional o split('; ')
(por ';') para que funcione correctamente. He propuesto una edición.
En caso de que quiera pegarlo rápidamente ...
document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); });
Y el código para un bookmarklet:
javascript:(function(){document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); }); })();
localStorage
lo que también window.localStorage.clear()
pueden ser útiles
Y aquí hay uno para borrar todas las cookies en todas las rutas y todas las variantes del dominio (www.midominio.com, midominio.com, etc.):
(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();
}
}
})();
Después de un poco de frustración con esto mismo, activé esta función que intentará eliminar una cookie con nombre de todas las rutas. Simplemente llame a esto para cada una de sus cookies y debería estar más cerca de eliminar todas las cookies que antes.
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 + ';';
}
}
Como siempre, diferentes navegadores tienen un comportamiento diferente, pero esto funcionó para mí. Disfrutar.
Si tiene acceso al complemento jquery.cookie , puede borrar todas las cookies de esta manera:
for (var it in $.cookie()) $.removeCookie(it);
Hasta donde sé, no hay forma de eliminar una cookie de cualquier conjunto de cookies en el dominio. Puede borrar una cookie si conoce el nombre y si el script está en el mismo dominio que la cookie.
Puede establecer el valor en vacío y la fecha de vencimiento en algún lugar del pasado:
var mydate = new Date();
mydate.setTime(mydate.getTime() - 1);
document.cookie = "username=; expires=" + mydate.toGMTString();
Aquí hay un excelente artículo sobre la manipulación de cookies mediante javascript.
document.cookie="username;expires=" + new Date(0).toGMTString()
, sin mucha diferencia si la cookie caduca hace 1 segundo o en 1970
Más simple Más rápido.
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";
}
Una respuesta influenciada por la segunda respuesta aquí y W3Schools
document.cookie.split(';').forEach(function(c) {
document.cookie = c.trim().split('=')[0] + '=;' + 'expires=Thu, 01 Jan 1970 00:00:00 UTC;';
});
Parece estar trabajando
editar: wow, casi exactamente lo mismo que Zach es interesante cómo Stack Overflow los puso uno al lado del otro.
editar: nvm que aparentemente fue temporal
Pensé que compartiría este método para borrar las cookies. Quizás pueda ser útil para otra persona en algún momento.
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;';
}
No sé por qué la primera respuesta votada no funciona para mí.
Como decía esta respuesta :
No hay una solución 100% para eliminar las cookies del navegador.
El problema es que las cookies se identifican de manera única no solo por su "nombre" clave sino también por su "dominio" y "ruta".
Sin conocer el "dominio" y la "ruta" de una cookie, no puede eliminarla de manera confiable. Esta información no está disponible a través del documento.cookie de JavaScript. ¡Tampoco está disponible a través del encabezado HTTP Cookie!
Entonces, mi idea es agregar un control de versión de Cookies con el conjunto completo de configuración, obtención y eliminación de cookies:
var cookie_version_control = '---2018/5/11';
function setCookie(name,value,days) {
var expires = "";
if (days) {
var date = new Date();
date.setTime(date.getTime() + (days*24*60*60*1000));
expires = "; expires=" + date.toUTCString();
}
document.cookie = name+cookie_version_control + "=" + (value || "") + expires + "; path=/";
}
function getCookie(name) {
var nameEQ = name+cookie_version_control + "=";
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;
}
function removeCookie(name) {
document.cookie = name+cookie_version_control+'=; Max-Age=-99999999;';
}
let expireTime = now.getTime();
now.setTime(expireTime);
document.cookie =document.cookie+';expires='+now.toUTCString()+';path=/';
eliminará las cookies.
Tengo un módulo de control de cookies más sofisticado y orientado a OOP. También contiene un deleteAll
método para borrar todas las cookies existentes. Tenga en cuenta que esta versión del deleteAll
método tiene una configuración path=/
que provoca la eliminación de todas las cookies dentro del dominio actual. Si necesita eliminar las cookies solo de algún alcance, tendrá que actualizar este método agregando path
parámetros dinámicos a este método.
Hay Cookie
clase principal :
import {Setter} from './Setter';
export class Cookie {
/**
* @param {string} key
* @return {string|undefined}
*/
static get(key) {
key = key.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1');
const regExp = new RegExp('(?:^|; )' + key + '=([^;]*)');
const matches = document.cookie.match(regExp);
return matches
? decodeURIComponent(matches[1])
: undefined;
}
/**
* @param {string} name
*/
static delete(name) {
this.set(name, '', { expires: -1 });
}
static deleteAll() {
const cookies = document.cookie.split('; ');
for (let cookie of cookies) {
const index = cookie.indexOf('=');
const name = ~index
? cookie.substr(0, index)
: cookie;
document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:00 GMT;path=/';
}
}
/**
* @param {string} name
* @param {string|boolean} value
* @param {{expires?:Date|string|number,path?:string,domain?:string,secure?:boolean}} opts
*/
static set(name, value, opts = {}) {
Setter.set(name, value, opts);
}
}
El método de establecimiento de cookies ( Cookie.set
) es bastante complejo, así que lo descompuse en otra clase. Hay un código de este:
export class Setter {
/**
* @param {string} name
* @param {string|boolean} value
* @param {{expires?:Date|string|number,path?:string,domain?:string,secure?:boolean}} opts
*/
static set(name, value, opts = {}) {
value = Setter.prepareValue(value);
opts = Setter.prepareOpts(opts);
let updatedCookie = name + '=' + value;
for (let i in opts) {
if (!opts.hasOwnProperty(i)) continue;
updatedCookie += '; ' + i;
const value = opts[i];
if (value !== true)
updatedCookie += '=' + value;
}
document.cookie = updatedCookie;
}
/**
* @param {string} value
* @return {string}
* @private
*/
static prepareValue(value) {
return encodeURIComponent(value);
}
/**
* @param {{expires?:Date|string|number,path?:string,domain?:string,secure?:boolean}} opts
* @private
*/
static prepareOpts(opts = {}) {
opts = Object.assign({}, opts);
let {expires} = opts;
if (typeof expires == 'number' && expires) {
const date = new Date();
date.setTime(date.getTime() + expires * 1000);
expires = opts.expires = date;
}
if (expires && expires.toUTCString)
opts.expires = expires.toUTCString();
return opts;
}
}
Aquí hay un código simple para eliminar todas las cookies en 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);
}
Ejecute la función deleteAllCookies()
para borrar todas las cookies.
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}`;
}, "");
}
Nota: no maneja rutas
//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=;';
}
}
Después de probar casi todos los métodos enumerados en varios estilos de navegadores en múltiples estilos de cookies, encontré que casi nada aquí funciona, incluso el 50%.
Por favor, ayuda a corregir según sea necesario, pero voy a tirar mis 2 centavos aquí. El siguiente método desglosa todo y básicamente construye la cadena de valor de la cookie en función de las piezas de configuración, además de incluir una compilación paso a paso de la cadena de ruta, comenzando por /
supuesto.
Espero que esto ayude a otros y espero que cualquier crítica pueda venir en forma de perfeccionar este método. Al principio quería un simple 1-liner como otros buscaban, pero las cookies JS son una de esas cosas que no son tan fáciles de manejar.
;(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;
}
}
})();
Jquery:
var cookies = $.cookie();
for(var cookie in cookies) {
$.removeCookie(cookie);
}
vainilla 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
}
Encontré un problema en IE y Edge. Los navegadores webkit (Chrome, safari) parecen ser más indulgentes. Al configurar las cookies, siempre establezca la "ruta" a algo, porque el valor predeterminado será la página que configura la cookie. Entonces, si intenta caducar en una página diferente sin especificar la "ruta", la ruta no coincidirá y no caducará. El document.cookie
valor no muestra la ruta o la caducidad de una cookie, por lo que no puede deducir dónde se configuró la cookie mirando el valor.
Si necesita expirar las cookies de diferentes páginas, guarde la ruta de la página de configuración en el valor de la cookie para que pueda retirarla más tarde o siempre agregue "; path=/;"
el valor de la cookie. Entonces caducará desde cualquier página.
name = ""
lugar, para borrar el valor sin nombre.