Storage & Cookies · Privacy Tests

Evercookie Test

Check every place a site could hide an identifier that survives clearing your cookies.

Checking storage surfaces…
—
—
Of 6 available
—
Holding data now

Surfaces an identifier could use

What is stored here right now

This page can only see its own origin. It cannot read the cookies, storage or databases another site has already written to your browser, and it writes no identifier of its own — the two probe keys it uses are deleted before this panel finishes drawing.

On this page
  1. What an evercookie is
  2. The storage surfaces
  3. What clearing removes
  4. What this test cannot see
  5. Reducing what survives

What an evercookie actually is

The idea is simple and slightly rude. Instead of trusting one cookie to remember you, a script writes the same identifier into every store it can reach, then checks each of them on your next visit and restores any that are missing. Delete the cookie and local storage quietly hands the value back; clear local storage and the copy in IndexedDB fills the gap.

The point is redundancy. Every individual mechanism is easy to clear, but clearing all of them at once is more effort than most people make, and a single surviving copy is enough to rebuild the rest. The panel above shows how many surfaces are available to this origin and which of them currently hold something, which is the raw material the technique needs.

This is availability, not a detection

Nothing here reads another site’s data. A page can only see its own origin, so the six rows describe what is possible in your browser, not what a tracker has already planted.

The storage surfaces it uses

Six surfaces matter in a browser, and each has a different lifetime and a different way of being cleared.

  • Cookies. Tiny, sent to the server on every matching request, and the one people actually clear. Only non-HttpOnly cookies set for this origin are visible to script.
  • localStorage. Roughly 5 MB, no expiry, cleared only with site data. The local storage test measures its real capacity.
  • sessionStorage. Same API, but tied to one tab and gone when that tab closes, so it is the weakest of the six.
  • IndexedDB. Hundreds of megabytes of structured records, and the largest place a small identifier can hide.
  • CacheStorage. The cache a service worker reads from. Identifiers are usually smuggled inside cached responses rather than as keys.
  • Service worker. A registered worker can intercept requests and rewrite them, so it can keep state and re-inject a value even after other stores are emptied.

What clearing cookies actually removes

The old advice, “just clear your cookies”, was written for a web where the cookie was the only store. It no longer covers everything. Clearing cookies alone leaves local storage, IndexedDB, caches and service worker registrations untouched, which is precisely the gap an evercookie is built to use.

Clearing site data is the stronger action, because it removes all of them for that origin in one step, and it is what most browsers now offer under a single heading. Private windows are stronger still: because the whole session is discarded on close, nothing needs to be cleared by hand.

The limits are worth stating plainly. A clear removes data for the origins you clear, not for every origin you have visited, and partitioned third-party storage can leave copies in contexts the main site-data clear does not reach on older builds. None of this is a reason to skip it — it is a reason not to treat it as a complete answer.

What this evercookie test cannot see

The honest boundary is origin separation. Script on this page can reach the stores belonging to this domain and nothing else, so it cannot tell you whether a shop, an advert or an analytics vendor has planted an identifier of its own. No web page can, because the browser does not expose another origin’s data to script.

There is a second limit in what the rows even mean. “Available” means the API responded to a probe write and read, not that a site has used it. “Holding data” counts entries this origin already has, which on a normal visit is usually a preference or a cached draft rather than anything sinister.

What the test does give you is the shape of the target. If five or six surfaces are open, an identifier written today could be spread widely and would need a full site-data clear to remove. If most are blocked, there are far fewer places for one to go. The cookies and storage test covers the same ground from the availability side.

Reducing what survives a wipe

The practical defences are unglamorous. Clear site data rather than just cookies, and do it for sites you do not need to stay signed in to. Use a private window for one-off browsing, since it starts empty and discards everything at the end. If you want a running check on which origins are storing what, the cookies and storage test and this page together cover both angles.

Blocking storage outright is the bluntest option and it breaks a lot: logins and preferences stop persisting, and many single-page apps fail in ways that look like bugs. It also does not address the signal that needs no storage. A fingerprint is recomputed from your device on every visit and survives every clear you can perform, which is why it is the harder problem.

Where blockers help

A content blocker usually stops known tracking scripts before they run, which prevents an identifier from being written in the first place. That is a real limit on the technique, and it works before any of the surfaces above are touched.

Frequently Asked Questions

What is an evercookie?
It is an identifier a site writes into several different storage mechanisms at once, then rebuilds from whichever copies survive. Delete your cookies and the value is restored from local storage; clear that too and it comes back from IndexedDB. The name comes from a well-known 2010 demonstration, and the technique is often called a zombie or persistent cookie.
Are evercookies still a real threat?
The classic version is largely defanged. Browsers now partition storage by the top-level site, clear it together when you clear site data, and evict unused origins automatically. The mechanism still works within one site, which is why logged-in sessions are so durable, but it no longer follows you cleanly across unrelated domains the way it once did.
Does this test tell me if a site has planted one?
No, and no web page can. What it reports is how many of the six surfaces are open to this origin and which of them hold data right now. Whether another site planted an identifier of its own is invisible from here, because storage is separated per origin.
Why does service worker registration count as storage?
A registered service worker is itself something a site has written into your browser, and one with a cache can serve content without a network request. It is listed here because it is another durable place a site can keep state, alongside the cache entries it can hold. The IndexedDB test covers the largest surface in more detail.
What actually removes all of this?
Clearing cookies and site data for the site in question removes cookies, local storage, IndexedDB, caches and service worker registrations together. Doing it from a private window is more thorough, since the browser discards the whole session on close. Neither touches a fingerprint, which needs no storage at all.