JavaScript kullanarak geçerli alan için tüm çerezleri nasıl silebilirsiniz?
JavaScript kullanarak geçerli alan için tüm çerezleri nasıl silebilirsiniz?
Yanıtlar:
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";
}
}
Bu kodun iki sınırlaması olduğunu unutmayın:
HttpOnly
Bayrak, HttpOnly
Javascript'in çereze erişimini devre dışı bıraktığı için bayrak ayarlı çerezleri silmez .Path
değerle ayarlanmış çerezleri silmez . (Bu, çerezlerin görünmesine rağmen, ayarlandığı değeri document.cookie
belirtmeden silemezsiniz Path
.)trim()
için ek alana veya split('; ')
(';' ile) gerekir. Bir düzenleme önerdim.
Hızlı bir şekilde yapıştırmak istiyorsanız ...
document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); });
Ve bir yer işaretinin kodu:
javascript:(function(){document.cookie.split(";").forEach(function(c) { document.cookie = c.replace(/^ +/, "").replace(/=.*/, "=;expires=" + new Date().toUTCString() + ";path=/"); }); })();
localStorage
So window.localStorage.clear()
yanı yararlı olabilir
Ve işte tüm yollardaki ve alan adının tüm varyantlarındaki (www.alanadim.com, alanadim.com vb.) Tüm çerezleri silmek için bir tane:
(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();
}
}
})();
Bu kendimi biraz hayal kırıklığı sonra tüm yolları bir adlandırılmış çerez silmeye çalışacağım bu işlevi birlikte çaldı. Bunu çerezlerinizin her biri için arayın ve daha önce bulunduğunuz her çerezi silmeye daha yakın olmalısınız.
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 + ';';
}
}
Her zaman olduğu gibi farklı tarayıcıların farklı davranışları vardır, ancak bu benim için çalıştı. Zevk almak.
Jquery.cookie eklentisine erişiminiz varsa, tüm çerezleri şu şekilde silebilirsiniz:
for (var it in $.cookie()) $.removeCookie(it);
Bildiğim kadarıyla alan adında herhangi bir çerez battaniye silmek için bir yolu yoktur. Adı biliyorsanız ve komut dosyası tanımlama bilgisiyle aynı alan adındaysa bir çerezi temizleyebilirsiniz.
Değeri boş olarak ve son kullanma tarihini geçmişte herhangi bir yere ayarlayabilirsiniz:
var mydate = new Date();
mydate.setTime(mydate.getTime() - 1);
document.cookie = "username=; expires=" + mydate.toGMTString();
Javascript kullanarak çerezleri manipüle etmek için mükemmel bir makale var .
document.cookie="username;expires=" + new Date(0).toGMTString()
- çerez 1 saniye önce veya 1970'de sona ererse çok fazla fark yok
Daha basit. Daha hızlı.
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";
}
Hem ikinci cevaptan hem de W3Schools'tan etkilenen bir cevap
document.cookie.split(';').forEach(function(c) {
document.cookie = c.trim().split('=')[0] + '=;' + 'expires=Thu, 01 Jan 1970 00:00:00 UTC;';
});
Çalışıyor gibi görünüyor
edit: wow neredeyse Stack Overflow onları yan yana koymak ilginç ilginç.
düzenleme: görünüşte geçici nvm
Çerezleri temizlemek için bu yöntemi paylaşacağımı düşündüm. Belki bir noktada başka biri için yararlı olabilir.
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;';
}
İlk oylanan cevabın neden işe yaramadığını bilmiyorum.
As Bu cevap şunları söyledi:
Tarayıcı çerezlerini silmek için% 100 çözüm yoktur.
Sorun, çerezlerin yalnızca anahtar "adları" ile değil "alan adları" ve "yolları" ile de benzersiz bir şekilde tanımlanmasıdır.
Bir çerezin "alan adını" ve "yolunu" bilmeden, onu güvenilir bir şekilde silemezsiniz. Bu bilgilere JavaScript'in document.cookie adresinden ulaşılamaz. HTTP Çerez başlığı üzerinden de mevcut değil!
Benim fikrim, çerezlerin ayarlanması, alınması ve kaldırılmasıyla birlikte bir Cookie sürüm kontrolü eklemektir:
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=/';
çerezleri kaldırır.
Daha sofistike ve OOP odaklı bir çerez kontrol modülüm var. Ayrıca deleteAll
mevcut tüm çerezleri temizleme yöntemi de içerir . deleteAll
Yöntemin bu sürümünde, path=/
geçerli etki alanındaki tüm çerezlerin silinmesine neden olan bir ayar bulunduğunu unutmayın. Çerezleri yalnızca bir kapsamdan silmeniz gerekiyorsa, bu yönteme dinamik path
parametrem eklemem için bu yöntemi yükseltmeniz gerekecektir .
Ana Cookie
sınıf var:
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);
}
}
Cookie setter method ( Cookie.set
) oldukça karmaşık olduğundan diğer sınıfa ayrıştırdım. Bu kod var:
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;
}
}
İşte JavaScript'teki tüm çerezleri silmek için basit bir kod .
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()
Tüm çerezleri temizlemek için işlevi çalıştırın .
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}`;
}, "");
}
Not: Yolları işlemez
//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=;';
}
}
Birden çok çerez stilinde birden çok tarayıcı stilinde listelenen neredeyse hiç yöntemi test ettikten sonra, burada neredeyse hiçbir şeyin% 50 bile çalışmadığını buldum.
Lütfen gerektiği şekilde düzeltmeye yardımcı olun, ancak 2 sentimi buraya atacağım. Aşağıdaki yöntem her şeyi bozar ve temel olarak her iki ayar parçasına göre çerez değeri dizesini oluşturur ve /
elbette başlayarak yol dizesinin adım adım derlemesini de içerir .
Umarım bu başkalarına yardımcı olur ve umarım herhangi bir eleştiri bu yöntemi mükemmelleştirmek şeklinde olabilir. İlk başta bazılarının aradığı gibi basit bir 1-astar istedim, ama JS çerezleri bu kadar kolay halledilmeyen şeylerden biri.
;(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);
}
vanilya 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
}
IE ve Edge'de bir sorun buldum. Webkit tarayıcıları (Chrome, safari) daha bağışlayıcı görünüyor. Çerezleri ayarlarken, her zaman "yolu" bir şey olarak ayarlayın, çünkü varsayılan, çerezi ayarlayan sayfa olacaktır. Dolayısıyla, "yolu" belirtmeden farklı bir sayfada sona erdirmeye çalışırsanız, yol eşleşmez ve süresi dolmaz. document.cookie
Eğer çerez değerine bakılarak yer aldığı kısma türetmek edemez böylece değer, bir çerez için yol veya son kullanma göstermez.
Farklı sayfalardan çerezlerin süresinin dolması gerekiyorsa, ayar sayfasının yolunu çerez değerine kaydedin, böylece daha sonra dışarı çekebilir veya her zaman "; path=/;"
çerez değerine ekleyebilirsiniz . Sonra herhangi bir sayfadan sona erecek.
name = ""
adsız değeri silmek için bunu yapmalısınız .