Videur de cookies
đ„1.0 et đ„2.0
đ§č Stockage & Recharger đ§č
âš
đ§č Vider cookies, stockage & recharger
đ
đ§Ș
Journal de test
:
đ§č Vider cookies, recharger simple V1.0
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" /> <title>Vider cookies, stockage & recharger V1.0</title> <meta charset="UTF-8" /> <!-- đ Bouton combinĂ© (vider cookies + recharger) --> <!-- Create By sync - https://feuille-heures-angelique.alwaysdata.net - (site ver:9.0.5) --> <!-- đ Style adaptĂ© --> <style type="text/css"> .buttonCookies { background-color: #99cc66; color: black; padding: 10px 15px; font-size: 12px; border-radius: 8px; cursor: pointer; max-width: 90vw; width: 220px; margin-top: 2px; /* â Marge au-dessus du bouton */ overflow: hidden; text-align: center; user-select: none; } #logZone { font-family: monospace; background: #f0f0f0; color: #222; border: 1px solid #ccc; padding: 8px; width: 90%; max-width: 350px; margin: 10px auto; text-align: left; white-space: pre-wrap; border-radius: 6px; box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.1); } </style> <div style="text-align: center;">đ <button class="buttonCookies" onclick="clearEverything()" title="Seuls les cookies du site concernĂ©s sont supprimĂ©s">đ§č Vider cookies, stockage & recharger</button>âš <!-- â Log au-dessus, bouton en dessous --> <div id="logZone">đ§Ș <strong>Journal de test</strong> :</div> </div> <div style="margin: 15px;"> <footer style="position:relative; margin:0 auto; width:330px; text-align:center; border-radius:20px; overflow:hidden; box-shadow:0 0 12px rgba(0,0,0,0.3); padding:10px 0; font-family:sans-serif; font-size:12px;"><p style="margin: 0;"><a href="https://feuille-heures-angelique.alwaysdata.net/" style="text-decoration: none; color: inherit;">Calculatrice dâheures - Feuille d'Heures AngĂ©lique</a></p></footer></div> <script> function logMessage(message) { console.log(message); const log = document.getElementById("logZone"); log.innerText += "\n" + message; } function detectDeviceInfo() { const ua = navigator.userAgent; let device = "Inconnu"; if (/android/i.test(ua)) device = "Android"; else if (/iPad|iPhone|iPod/.test(ua)) device = "iOS"; else if (/Windows NT/.test(ua)) device = "Windows"; else if (/Mac OS X/.test(ua)) device = "macOS"; else if (/Linux/.test(ua)) device = "Linux"; let browser = "Navigateur inconnu"; if (/Chrome/.test(ua)) browser = "Chrome"; else if (/Safari/.test(ua) && !/Chrome/.test(ua)) browser = "Safari"; else if (/Firefox/.test(ua)) browser = "Firefox"; else if (/Edg/.test(ua)) browser = "Edge"; else if (/Opera|OPR/.test(ua)) browser = "Opera"; logMessage("đ§Ÿ Appareil dĂ©tectĂ© : " + device); logMessage("đ Navigateur : " + browser); } function clearEverything() { const log = document.getElementById("logZone"); log.innerText = "đ§Ș Journal de test :"; // reset zone detectDeviceInfo(); // Afficher les cookies const rawCookies = document.cookie; if (rawCookies) { const cookieList = rawCookies.split("; "); logMessage("đȘ Cookies accessibles : (" + cookieList.length + ")"); cookieList.forEach(c => { const [name, value] = c.split("="); logMessage(`âą ${name.trim()} = ${value}`); }); } else { logMessage("â Aucun cookie visible via JavaScript."); } // Fonction utilitaire pour supprimer un cookie sur un path donnĂ© function deleteCookie(name, path) { document.cookie = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=" + path + ";"; } // Supprimer les cookies (avec path '/' et sans path) const cookies = document.cookie.split(";"); cookies.forEach(cookie => { const eqPos = cookie.indexOf("="); const name = eqPos > -1 ? cookie.substring(0, eqPos).trim() : cookie.trim(); deleteCookie(name, "/"); deleteCookie(name, ""); }); logMessage("đ§č Cookies supprimĂ©s."); // Vider localStorage et sessionStorage avec try/catch try { const localLength = localStorage.length; localStorage.clear(); logMessage(`đïž Stockage local vidĂ© (${localLength} Ă©lĂ©ments supprimĂ©s).`); } catch(e) { logMessage("â ïž Erreur lors du nettoyage de localStorage : " + e.message); } try { const sessionLength = sessionStorage.length; sessionStorage.clear(); logMessage(`đïž Stockage session vidĂ© (${sessionLength} Ă©lĂ©ments supprimĂ©s).`); } catch(e) { logMessage("â ïž Erreur lors du nettoyage de sessionStorage : " + e.message); } // Rechargement diffĂ©rĂ© logMessage("đ Rechargement en cours..."); setTimeout(() => { window.location.href = window.location.pathname + '?refresh=' + Date.now(); }, 2500); // Temp d'affichage } </script> <!-- đ» Ordinateurs đ± Smartphones Android / iOS đ§Ș Tous navigateurs modernes //--> <!-- đ§ Aide MĂ©mo : â Ce bouton : â Affiche les cookies actuels â DĂ©tecte le navigateur et l'appareil â Vide les cookies accessibles par JS â Vide localStorage + sessionStorage â Recharge la page avec ?refresh=... â ïž Ce script ne peut PAS : â Supprimer les cookies HttpOnly (protĂ©gĂ©s par le navigateur) â Vider le cache complet du navigateur (images, fichiers...) Pour cela, il faut le faire manuellement dans les paramĂštres du navigateur. --> <!-- â Important Ă savoir : Les cookies supprimĂ©s sont uniquement ceux accessibles via JavaScript (donc pas HttpOnly). Le cache complet du navigateur (images, JS, etc.) ne peut pas ĂȘtre vidĂ© par script. L'utilisateur doit le faire via les paramĂštres du navigateur. //-->
đ§č Vider cookies, stockage & recharger V2.0 (âš)
<!DOCTYPE html> <html lang="fr"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" /> <title>Vider cookies, stockage & recharger V2.0 (âš)</title> <meta charset="UTF-8" /> <!-- đđ©č Bouton combinĂ© (vider cookies + recharger) --> <!-- Create By sync - https://feuille-heures-angelique.alwaysdata.net - (site ver:9.0.5) --> <!-- đđ Style adaptĂ© --> <style type="text/css"> .buttonCookies { background-color: #99cc66; color: black; padding: 10px 15px; font-size: 12px; border-radius: 8px; cursor: pointer; max-width: 90vw; width: 220px; margin-top: 2px; /* â Marge au-dessus du bouton */ overflow: hidden; text-align: center; user-select: none; } #logZone { font-family: monospace; background: #f0f0f0; color: #222; border: 1px solid #ccc; padding: 8px; width: 90%; max-width: 350px; margin: 10px auto; text-align: left; white-space: pre-wrap; border-radius: 6px; box-shadow: 1px 1px 5px rgba(0, 0, 0, 0.1); } </style> <div style="text-align: center;"> đ<button class="buttonCookies" onclick="clearEverything()" title="Seuls les cookies du site concernĂ©s sont supprimĂ©s">đ§č Vider cookies, stockage & recharger</button>âš <!-- â Log au-dessus, bouton en dessous --> <div id="logZone">đ§Ș <strong>Journal de test</strong> :</div> </div> <div style="margin: 15px;"> <footer style="position:relative; margin:0 auto; width:330px; text-align:center; border-radius:20px; overflow:hidden; box-shadow:0 0 12px rgba(0,0,0,0.3); padding:10px 0; font-family:sans-serif; font-size:12px;"><p style="margin: 0;"><a href="https://feuille-heures-angelique.alwaysdata.net/" style="text-decoration: none; color: inherit;">Calculatrice dâheures - Feuille d'Heures AngĂ©lique</a></p></footer></div> <script> function logMessage(message) { console.log(message); const log = document.getElementById("logZone"); log.innerText += "\n" + message; } function detectDeviceInfo() { const ua = navigator.userAgent; let device = "Inconnu"; if (/android/i.test(ua)) device = "Android"; else if (/iPad|iPhone|iPod/.test(ua)) device = "iOS"; else if (/Windows NT/.test(ua)) device = "Windows"; else if (/Mac OS X/.test(ua)) device = "macOS"; else if (/Linux/.test(ua)) device = "Linux"; let browser = "Navigateur inconnu"; if (/Chrome/.test(ua)) browser = "Chrome"; else if (/Safari/.test(ua) && !/Chrome/.test(ua)) browser = "Safari"; else if (/Firefox/.test(ua)) browser = "Firefox"; else if (/Edg/.test(ua)) browser = "Edge"; else if (/Opera|OPR/.test(ua)) browser = "Opera"; logMessage("đ§Ÿ Appareil dĂ©tectĂ© : " + device); logMessage("đ Navigateur : " + browser); } // Nouvelle fonction pour nettoyer IndexedDB async function clearIndexedDB() { if (!window.indexedDB) { logMessage("â IndexedDB non supportĂ©."); return; } try { const dbNames = await indexedDB.databases(); let count = 0; if (dbNames && dbNames.length > 0) { for (const dbInfo of dbNames) { const dbName = dbInfo.name; await new Promise((resolve, reject) => { const request = indexedDB.deleteDatabase(dbName); request.onsuccess = () => { logMessage(`đïž IndexedDB : '${dbName}' supprimĂ©e.`); count++; resolve(); }; request.onerror = (event) => { logMessage(`â ïž Erreur IndexedDB lors de la suppression de '${dbName}' : ${event.target.error}`); resolve(); // Continuer mĂȘme en cas d'erreur }; request.onblocked = () => { logMessage(`â ïž IndexedDB : Suppression de '${dbName}' bloquĂ©e. Fermez les autres onglets.`); resolve(); // Continuer mĂȘme si bloquĂ© }; }); } logMessage(`đïž Nettoyage IndexedDB terminĂ© (${count} bases de donnĂ©es supprimĂ©es).`); } else { logMessage("â Aucune base de donnĂ©es IndexedDB trouvĂ©e."); } } catch (e) { logMessage("â ïž Erreur lors de l'accĂšs Ă IndexedDB : " + e.message); } } // Nouvelle fonction pour nettoyer l'API Cache (inclut les caches des Service Workers) async function clearCaches() { if (!window.caches) { logMessage("â API Cache non supportĂ©e."); return; } try { const keys = await caches.keys(); let count = 0; if (keys.length > 0) { for (const key of keys) { await caches.delete(key); logMessage(`đïž Cache d'API : '${key}' supprimĂ©.`); count++; } logMessage(`đïž Nettoyage API Cache terminĂ© (${count} caches supprimĂ©s).`); } else { logMessage("â Aucun cache d'API/Service Worker trouvĂ©."); } } catch (e) { logMessage("â ïž Erreur lors du nettoyage de l'API Cache : " + e.message); } } // Fonction principale de nettoyage async function clearEverything() { const log = document.getElementById("logZone"); log.innerText = "đ§Ș Journal de test :"; // reset zone detectDeviceInfo(); // --- 1. Afficher et supprimer les Cookies --- const rawCookies = document.cookie; if (rawCookies) { const cookieList = rawCookies.split("; "); logMessage("đȘ Cookies accessibles : (" + cookieList.length + ")"); cookieList.forEach(c => { const [name, value] = c.split("="); logMessage(`âą ${name.trim()} = ${value}`); }); } else { logMessage("â Aucun cookie visible via JavaScript."); } // Fonction utilitaire pour supprimer un cookie sur des paths/domains courants function deleteCookie(name, path, domain) { let cookieString = name + "=; expires=Thu, 01 Jan 1970 00:00:00 UTC;"; if (path) cookieString += " path=" + path + ";"; if (domain) cookieString += " domain=" + domain + ";"; document.cookie = cookieString; } // Supprimer les cookies (en essayant les paths courants : '/', '' et le domaine courant) const cookies = document.cookie.split(";"); cookies.forEach(cookie => { const eqPos = cookie.indexOf("="); const name = eqPos > -1 ? cookie.substring(0, eqPos).trim() : cookie.trim(); // Essayer de supprimer sur diffĂ©rents paths deleteCookie(name, "/"); // Chemin racine deleteCookie(name, ""); // Chemin par dĂ©faut // Optionnel : essayer le domaine racine (pour les sous-domaines) const hostname = window.location.hostname; const domainParts = hostname.split('.'); if (domainParts.length > 1) { const rootDomain = domainParts.slice(-2).join('.'); deleteCookie(name, "/", "." + rootDomain); // Tenter suppression sur le domaine racine } }); logMessage("đ§č Cookies supprimĂ©s (chemins /, '', et domaine racine tentĂ©s)."); // --- 2. Vider Stockage Web (localStorage et sessionStorage) --- try { const localLength = localStorage.length; localStorage.clear(); logMessage(`đïž Stockage local vidĂ© (${localLength} Ă©lĂ©ments supprimĂ©s).`); } catch(e) { logMessage("â ïž Erreur lors du nettoyage de localStorage : " + e.message); } try { const sessionLength = sessionStorage.length; sessionStorage.clear(); logMessage(`đïž Stockage session vidĂ© (${sessionLength} Ă©lĂ©ments supprimĂ©s).`); } catch(e) { logMessage("â ïž Erreur lors du nettoyage de sessionStorage : " + e.message); } // --- 3. Vider IndexedDB --- logMessage("âł Nettoyage IndexedDB..."); await clearIndexedDB(); // Attendre que le nettoyage IDB soit terminĂ© // --- 4. Vider Caches API/Service Worker --- logMessage("âł Nettoyage des caches..."); await clearCaches(); // Attendre que le nettoyage des caches soit terminĂ© // --- 5. Rechargement diffĂ©rĂ© --- logMessage("đ Rechargement en cours... (dans 2,5s)"); setTimeout(() => { // Ajout d'un paramĂštre unique pour s'assurer que le navigateur ne sert pas une page en cache window.location.href = window.location.pathname + '?refresh=' + Date.now(); }, 2500); // Temps d'affichage } </script> <!-- đ» Ordinateurs đ± Smartphones Android / iOS đ§Ș Tous navigateurs modernes //--> <!-- đ§ Aide MĂ©mo : â Ce bouton : â Affiche les cookies actuels â DĂ©tecte le navigateur et l'appareil â Vide les cookies accessibles par JS â Vide localStorage + sessionStorage â Recharge la page avec ?refresh=... â ïž Ce script ne peut PAS : â Supprimer les cookies HttpOnly (protĂ©gĂ©s par le navigateur) â Vider le cache complet du navigateur (images, fichiers...) Pour cela, il faut le faire manuellement dans les paramĂštres du navigateur. --> <!-- â Important Ă savoir : Les cookies supprimĂ©s sont uniquement ceux accessibles via JavaScript (donc pas HttpOnly). Le cache complet du navigateur (images, JS, etc.) ne peut pas ĂȘtre vidĂ© par script. L'utilisateur doit le faire via les paramĂštres du navigateur. Cookie Deletion Robustesse : La suppression des cookies tente dĂ©sormais de couvrir les chemins par dĂ©faut (/ et "") et essaie mĂȘme le domaine racine (ex. my-domain.com au lieu de sub.my-domain.com) pour une couverture maximale. âą IndexedDB (IDB) Nettoyage : La fonction clearIndexedDB() Ă©numĂšre et supprime toutes les bases de donnĂ©es IndexedDB associĂ©es Ă l'origine actuelle. C'est essentiel, car IDB est souvent utilisĂ© pour les donnĂ©es importantes d'applications web. âą Cache API Nettoyage : La fonction clearCaches() supprime tous les caches gĂ©rĂ©s par l'API Cache, ce qui inclut les caches utilisĂ©s par les Service Workers. Ceci est crucial pour les applications PWA ou hors ligne. âą Utilisation d'await : Les fonctions de nettoyage IndexedDB et Caches sont async (asynchrones) et sont appelĂ©es avec await dans clearEverything(). Cela garantit que le journal affiche l'Ă©tat de ces nettoyages complexes avant le rechargement de la page. Ce script offre une suppression beaucoup plus complĂšte de l'ensemble des mĂ©canismes de stockage cĂŽtĂ© client modernes. //-->