आप जावास्क्रिप्ट का उपयोग करके वर्तमान डोमेन के लिए सभी कुकीज़ कैसे हटाते हैं?
आप जावास्क्रिप्ट का उपयोग करके वर्तमान डोमेन के लिए सभी कुकीज़ कैसे हटाते हैं?
जवाबों:
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";
}
}
ध्यान दें कि इस कोड की दो सीमाएँ हैं:
HttpOnly
ध्वज सेट के साथ कुकीज़ को नहीं हटाएगा, क्योंकि HttpOnly
ध्वज कुकी में जावास्क्रिप्ट की पहुंच को अक्षम करता है।Path
मूल्य के साथ सेट किया गया है । (यह इस तथ्य के बावजूद है कि वे कुकीज़ दिखाई देंगी document.cookie
, लेकिन आप इसे उसी Path
मूल्य को निर्दिष्ट किए बिना नहीं हटा सकते हैं जिसके साथ इसे सेट किया गया था।)trim()
लिए अतिरिक्त स्थान या split('; ')
(';') के पास रखना होगा। मैंने एक संपादन प्रस्तावित किया है।
मामले में आप इसे जल्दी से चिपकाना चाहते हैं ...
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=/"); }); })();
localStorage
तो window.localStorage.clear()
साथ ही सहायक हो सकता है
और यहां सभी रास्तों और डोमेन के सभी वेरिएंट (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();
}
}
})();
अपने आप में थोड़ी निराशा के बाद मैंने इस समारोह में एक साथ दस्तक दी, जो सभी रास्तों से एक नामित कुकी को हटाने का प्रयास करेगा। बस अपने प्रत्येक कुकी के लिए इसे कॉल करें और आपको प्रत्येक कुकी को हटाने के करीब होना चाहिए, तब आप पहले थे।
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 + ';';
}
}
जैसा कि हमेशा अलग-अलग ब्राउज़रों का व्यवहार अलग-अलग होता है लेकिन यह मेरे लिए काम करता है। का आनंद लें।
यदि आपके पास jquery.cookie प्लगइन तक पहुंच है , तो आप इस तरह से सभी कुकीज़ मिटा सकते हैं:
for (var it in $.cookie()) $.removeCookie(it);
जहाँ तक मुझे पता है कि डोमेन पर किसी भी कुकी सेट को खाली करने का कोई तरीका नहीं है। आप कुकी को साफ़ कर सकते हैं यदि आप नाम जानते हैं और यदि स्क्रिप्ट कुकी के समान डोमेन पर है।
आप मान को खाली करने के लिए और समाप्ति तिथि को अतीत में कहीं पर सेट कर सकते हैं:
var mydate = new Date();
mydate.setTime(mydate.getTime() - 1);
document.cookie = "username=; expires=" + mydate.toGMTString();
जावास्क्रिप्ट का उपयोग करके कुकीज़ में हेरफेर करने पर यहां एक उत्कृष्ट लेख है ।
document.cookie="username;expires=" + new Date(0).toGMTString()
इतना भी कर सकते हैं - अगर कुकी 1 सेकंड पहले या 1970 में समाप्त हो जाए तो ज्यादा अंतर नहीं है
सरल। और तेज।
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";
}
एक उत्तर यहाँ और W3Schools दोनों के दूसरे उत्तर से प्रभावित है
document.cookie.split(';').forEach(function(c) {
document.cookie = c.trim().split('=')[0] + '=;' + 'expires=Thu, 01 Jan 1970 00:00:00 UTC;';
});
काम करने लगता है
संपादित करें: वाह लगभग Zach के दिलचस्प के रूप में ही कैसे ढेर अतिप्रवाह उन्हें एक दूसरे के बगल में डाल दिया।
संपादित करें: nvm जो कि अस्थायी रूप से अस्थायी था
मुझे लगा कि कुकीज़ साफ़ करने के लिए यह विधि साझा करूँगा। शायद यह किसी बिंदु पर किसी और के लिए सहायक हो सकता है।
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;';
}
मुझे नहीं पता कि पहला मतदान जवाब मेरे लिए काम क्यों नहीं करता है।
जैसा कि इस उत्तर ने कहा:
ब्राउज़र कुकीज़ को हटाने के लिए कोई 100% समाधान नहीं है।
समस्या यह है कि कुकीज़ को केवल उनके "नाम" से नहीं बल्कि उनके "डोमेन" और "पथ" द्वारा विशिष्ट रूप से पहचाना जाता है।
कुकी के "डोमेन" और "पथ" को जाने बिना, आप इसे मज़बूती से हटा नहीं सकते। यह जानकारी जावास्क्रिप्ट डॉक्यूमेंट.कॉकी के माध्यम से उपलब्ध नहीं है। यह HTTP कुकी हेडर के माध्यम से भी उपलब्ध नहीं है!
इसलिए मेरा विचार कुकी के पूर्ण नियंत्रण के साथ कुकी के संस्करण को जोड़ना, प्राप्त करना, हटाना है:
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=/';
कुकीज़ हटा दी जाएगी।
मेरे पास कुछ अधिक परिष्कृत और ओओपी-उन्मुख कुकी नियंत्रण मॉड्यूल है। इसमें deleteAll
सभी मौजूदा कुकी को साफ़ करने की विधि भी शामिल है । ध्यान दें कि deleteAll
विधि के इस संस्करण में सेटिंग है path=/
जो वर्तमान डोमेन के भीतर सभी कुकीज़ को हटाने का कारण बनता है। यदि आपको केवल कुछ दायरे से कुकीज़ को हटाने की आवश्यकता है, तो आपको इस विधि को इस विधि में मेरे गतिशील path
पैरामीटर को अपग्रेड करना होगा।
मुख्य Cookie
वर्ग है:
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.set
) बल्कि जटिल है इसलिए मैंने इसे अन्य वर्ग में विघटित कर दिया। इस एक का कोड है:
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;
}
}
यहाँ जावास्क्रिप्ट में सभी कुकीज़ को हटाने के लिए एक सरल कोड है ।
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()
सभी कुकी साफ़ करने के लिए फ़ंक्शन चलाएँ ।
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}`;
}, "");
}
नोट: पथ संभाल नहीं है
//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=;';
}
}
कुकीज़ की कई शैलियों पर ब्राउज़रों की कई शैली में सूचीबद्ध लगभग कभी विधि का परीक्षण करने के बाद, मैंने पाया कि यहां लगभग कुछ भी नहीं 50% काम करता है।
कृपया आवश्यकतानुसार सही मदद करें, लेकिन मैं अपने 2 सेंट यहाँ फेंकने जा रहा हूँ। निम्नलिखित विधि सब कुछ तोड़ देती है और मूल रूप से दोनों सेटिंग्स टुकड़ों के आधार पर कुकी मान स्ट्रिंग बनाता है, साथ ही पथ स्ट्रिंग के चरण निर्माण द्वारा एक कदम भी शामिल है, जिसके साथ शुरू होता है/
पाठ्यक्रम के है।
आशा है कि यह दूसरों की मदद करता है और मुझे आशा है कि कोई भी आलोचना इस पद्धति को पूर्ण करने के रूप में आ सकती है। सबसे पहले मैं एक साधारण-लाइनर चाहता था जैसा कि कुछ अन्य लोग चाहते थे, लेकिन जेएस कुकीज़ उन चीजों में से एक है जो इतनी आसानी से निपटा नहीं जाती हैं।
;(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);
}
वेनिला जेएस
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 और एज में एक समस्या मिली। वेबकिट ब्राउज़र (क्रोम, सफारी) अधिक क्षमा करने वाले लगते हैं। कुकीज़ सेट करते समय, हमेशा "पथ" को किसी चीज़ पर सेट करें, क्योंकि डिफ़ॉल्ट पेज होगा जो कुकी सेट करता है। इसलिए यदि आप "पथ" को निर्दिष्ट किए बिना किसी भिन्न पृष्ठ पर इसे समाप्त करने का प्रयास करते हैं, तो पथ मेल नहीं खाएगा और यह समाप्त नहीं होगा। document.cookie
मूल्य, एक कुकी के लिए पथ या समाप्ति प्रदर्शित नहीं करता है तो आप प्राप्त नहीं सकता, जिसमें कुकी मूल्य को देखकर किया गया था।
यदि आपको विभिन्न पृष्ठों से कुकीज़ को समाप्त करने की आवश्यकता है, तो सेटिंग पृष्ठ के पथ को कुकी मान में सहेजें ताकि आप इसे बाद में बाहर निकाल सकें या हमेशा "; path=/;"
कुकी मान पर जोड़ सकें । फिर यह किसी भी पेज से समाप्त हो जाएगा।
name = ""
इसके बजाय, अनमोल मान को मिटाने के लिए करना चाहिए ।