Skip to content

Web Browser Forensics: Cookies, Cache, History and Session Recovery

Where Chrome, Firefox, Safari and Edge keep history, cookies, cached objects and saved credentials; how to recover incognito traces; and how the artefacts read in Indian banking-fraud and phishing cases.

Last updated:

Share

Web browser forensics recovers user activity from a set of structured artefact stores that persist on disk regardless of whether the browser is closed or the session has ended. On Chromium-family browsers (Chrome, Edge, Brave, Opera), the primary artefacts are six SQLite databases inside the User Data profile directory, a Cache directory holding full HTTP response bodies, LevelDB stores for Local Storage and IndexedDB, and a Sessions folder recording tab state. Firefox uses an equivalent SQLite layout under a randomly-named Profiles directory; Safari uses SQLite and plist files under ~/Library/Safari. These stores together can establish visited URLs, typed search terms, saved credentials, rendered page content, active session tokens, and open tabs at the moment of seizure, providing a near-complete record of a user's online activity across all major browsers.

Chrome holds roughly 70 percent of the Indian desktop browser market, and every Chromium-family browser (Edge, Brave, Opera) shares the same profile layout. That layout stores history, cookies, autofill and saved credentials in a small set of SQLite files inside one User Data directory, making it the densest single artefact set on a seized Windows machine. In Indian banking-phishing and credential-theft cases, a Section 63 BSA certificate over those files is the standard route to admissibility, provided the chain of custody is intact.

Key takeaways

  • Chrome stores history, cookies, autofill and saved credentials in a small set of SQLite files in one user-data directory, making it the richest single artefact set on a seized Windows laptop.
  • Local Storage and IndexedDB can hold active session tokens for WhatsApp Web and Telegram Web that are functionally equivalent to access on a logged-in handset.
  • Browser cache stores response bodies, so the actual phishing page seen by a victim may be recoverable even after the suspect believes the session is gone.
  • Incognito mode does not eliminate traces: DNS cache, the pagefile, hibernation files, and registry MUICache entries can all preserve activity from a private session.
  • A Section 63 BSA certificate over browser SQLite files is court-viable if the chain of custody is clean, making proper acquisition procedure the critical step for admissibility.

Browser evidence is more than the URL bar. The Cache stores response bodies that may include the actual phishing page seen by the victim. Cookies and the Sessions folder can replay a logged-in session if collected before the suspect logs out. Local Storage and IndexedDB hold tokens for WhatsApp Web and Telegram Web that are equivalent to a logged-in handset. Incognito traces almost always survive in DNS cache, the pagefile, hibernation and registry MUICache, so the textbook line that incognito leaves zero trace is wrong in practice. This topic walks through where each artefact lives on Chrome, Firefox, Safari and Edge across Windows, macOS and Linux, the tools that read each store, and the Indian evidentiary rules that apply when the report reaches a trial court.

By the end of this topic you will be able to:

  • Identify the file path and core SQLite databases in a Chromium profile across Windows, macOS and Linux, and explain the evidentiary value of each.
  • Convert Chromium WebKit timestamps, Firefox PRTime values, and Safari Cocoa timestamps to UTC without error.
  • Explain what artefact stores (Cache, Local Storage, IndexedDB, Sessions folder) record beyond the URL history, and articulate why live acquisition is preferred when session-recovery is evidentiary.
  • List the system-level traces an incognito browsing session leaves on Windows, and identify which layers of evidence to examine when in-profile writes are absent.
  • Describe the Section 63 BSA certificate requirements for browser-extracted evidence and explain which artefacts in a typical phishing investigation require separate certification.
Key terms
User Data directory
The Chromium profile root that holds History, Cookies, Login Data, Web Data, Cache, Local Storage and Sessions. The Default profile is the one the user sees if they have not created a second profile.
Login Data
Chromium SQLite database of saved credentials. Passwords are stored encrypted; on Windows the OS master key sits under DPAPI scoped to the user account, on macOS under Keychain, on Linux under libsecret or kwallet.
places.sqlite
Firefox's combined history and bookmarks store. Visit timestamps are PRTime (microseconds since 1 January 1970). cookies.sqlite, formhistory.sqlite, key4.db and logins.json live alongside it.
Session restore
The browser feature that reopens tabs after a restart. Chrome writes Current Tabs / Current Session / Last Tabs / Last Session in the Sessions folder; Firefox writes sessionstore.jsonlz4 compressed with mozlz4.
Hindsight
An open-source Chromium artefact parser maintained against NIST CFTT-friendly test data. Parses History, Cookies, Local Storage, Downloads, Login Data metadata and Cache into a single timeline.
Section 63 BSA
Bharatiya Sakshya Adhiniyam 2023 provision that requires a statutory certificate for admissibility of a copy of an electronic record. Applies to browser-extracted exhibits produced in court (see our BSA topic).

Browser landscape in India and where the artefacts live

The browser share on Indian desktops sits around 70 percent Chrome, with Edge in the low double digits, Safari pinned to macOS, Firefox in single digits, and Brave and Opera making up the long tail. Mobile is heavier on Chrome and Safari. The forensic implication is clean: in most Indian cases the examiner is reading Chromium artefacts, with a Firefox or Safari profile as a secondary source.

BrowserEngine familyProfile root (Windows)Profile root (macOS)Profile root (Linux)
ChromeChromium / Blink%USERPROFILE%\AppData\Local\Google\Chrome\User Data\Default\~/Library/Application Support/Google/Chrome/Default/~/.config/google-chrome/Default/
EdgeChromium / Blink%USERPROFILE%\AppData\Local\Microsoft\Edge\User Data\Default\~/Library/Application Support/Microsoft Edge/Default/~/.config/microsoft-edge/Default/
BraveChromium / Blink%USERPROFILE%\AppData\Local\BraveSoftware\Brave-Browser\User Data\Default\~/Library/Application Support/BraveSoftware/Brave-Browser/Default/~/.config/BraveSoftware/Brave-Browser/Default/
FirefoxGecko%APPDATA%\Mozilla\Firefox\Profiles\<rand>.default-release\~/Library/Application Support/Firefox/Profiles/<rand>.default-release/~/.mozilla/firefox/<rand>.default-release/
SafariWebKit(macOS only)~/Library/Safari/(not applicable)
OperaChromium / Blink%APPDATA%\Opera Software\Opera Stable\~/Library/Application Support/com.operasoftware.Opera/~/.config/opera/

The Chromium layout repeats across Chrome, Edge, Brave and Opera, so a competent Chrome parser handles four of the top six browsers with no change. The differences sit at the edges: Edge writes a small number of extra preference files, Brave adds a Wallet directory and a Tor profile, Opera ships a separate VPN config that is worth pulling.

The second beat to remember is that a single seized laptop usually has more than one profile. The Default folder is one profile; Profile 1, Profile 2 and so on are alternative profiles, often used to separate work and personal accounts. Each profile has its own History, Cookies and Login Data. A common defence point in Indian phishing prosecutions is that the prosecution analysed only the Default profile and missed exculpatory activity under Profile 1. The acquisition checklist must list every profile directory it found.

Chrome SQLite databases: what each file proves

The Chromium profile keeps its evidentiary core in a handful of SQLite databases. Each of them answers a different investigative question, and a careful examiner queries them in the order that builds the user-activity timeline cleanly.

FileKey tablesWhat it provesTimestamp format
Historyurls, visits, visit_source, downloads, downloads_url_chains, keyword_search_terms, segmentsURLs visited, search terms typed into the omnibox, downloads with target paths and referrers, frequency segmentsWebKit time (microseconds since 1 January 1601 UTC)
Cookiescookies (host_key, name, encrypted_value, creation_utc, expires_utc, last_access_utc)Logged-in sessions, persistent identifiers, ad tracking, banking session cookiesWebKit time
Login Datalogins (origin_url, username_value, password_value (encrypted), date_created, date_last_used)Saved credentials and which sites the user authenticated toWebKit time
Web Dataautofill, autofill_profiles, credit_cards (encrypted), keywordsNames, addresses, phone numbers, partial card numbers offered by autofillWebKit time
Top Sitestop_sites (url, rank, last_updated)Frequently visited sites composite rankingWebKit time
Network Action Predictornetwork_action_predictor (user_text, url, number_of_hits, number_of_misses)What the user typed into the omnibox that triggered autocomplete (often retains URLs never actually visited)WebKit time

The Network Action Predictor is the database most students forget and the one that surprises in court. It records partial user input that triggered a URL prediction, even when the user never pressed Enter. A suspect who typed the first six letters of a phishing-template hosting domain and then backed out leaves a row in network_action_predictor and nothing in History. The defence point that "the suspect never visited the site" can be answered by producing the predictor row.

Login Data stores password_value as a blob encrypted with the OS-level master key. On Windows the master key sits under DPAPI scoped to the user account; the examiner needs the user's Windows password or a memory-resident master key to decrypt. On macOS the master key sits under Keychain. On Linux the key lives in libsecret or kwallet. The presence of an encrypted blob is itself evidence of a saved credential; decryption is a separate step that often needs the live machine or a memory image.

Cache, Local Storage, IndexedDB and the Sessions folder

The History database records what URL was requested. The Cache, Local Storage and Sessions stores record what the user actually saw and what sessions were active when the machine was last closed.

The Chromium Cache is a key-and-body store, typically deflate-compressed, that holds full HTTP response bodies until they expire or the user clears them. In phishing investigations, the Cache frequently contains the HTML and CSS of the lookalike banking page the victim rendered, including hidden form actions pointing to the attacker's collection endpoint. ChromeCacheView from NirSoft and the Hindsight cache module both extract cache entries as files keyed to their original URLs.

  1. Acquire the profile directory cold
    Image the User Data directory while Chrome is closed. Live SQLite files have a journal or WAL sidecar that must be copied alongside the main file or the most recent activity is lost.
  2. Verify integrity at acquisition
    Hash every file (SHA-256) and write the hash list into the chain-of-custody log. The Section 63 BSA certificate will reference these hashes.
  3. Open History first, then Cookies
    Build the URL timeline before reading the cookie state. The cookie state is meaningful only relative to the visits that set it.
  4. Walk the Cache
    Map cache keys back to URLs in History. Extract response bodies for phishing-page or download evidence.
  5. Open Local Storage and IndexedDB
    These are LevelDB stores; read them with leveldb-py or the Hindsight LevelDB module. WhatsApp Web and Telegram Web tokens sit here.
  6. Walk the Sessions folder
    Current Tabs, Current Session, Last Tabs, Last Session record open tabs and their state. Use these to reconstruct what the suspect was looking at when they closed the lid.

Local Storage and Session Storage are LevelDB key-value stores, one directory per origin. IndexedDB is also LevelDB-backed and is the heavier of the two, often holding cached message bodies and contact lists for web apps. For WhatsApp Web the IndexedDB store at web.whatsapp.com holds the full local message cache and the session token; collecting it from a live machine produces an artefact equivalent to a logged-in WhatsApp handset, which is why preserving the live profile (rather than rebooting) matters when the suspect is caught at the console.

Chromium profile artefact stores by evidentiary role. SQLite files (left) carry typed activity. LevelDB and Cache stores (rig
Chromium profile artefact stores by evidentiary role. SQLite files (left) carry typed activity. LevelDB and Cache stores (right) carry rendered content and live session state. Sessions folder (bottom) restores tab state across restarts.

The Sessions folder is the artefact that wins the "what was open on screen" question. Current Tabs records the currently open tabs and their scroll positions; Current Session records the navigation history within each tab. Last Tabs and Last Session record the equivalents from the previous browser run. After a crash, Chrome restores from Current Session; the file therefore often survives even when the user thought they closed everything.

Firefox, Safari and Edge: parallel stores, different shapes

Firefox keeps its profile in a randomly-named directory under the Profiles folder (the random prefix discourages accidental shared profiles). The core stores are SQLite, like Chromium, but the names and the timestamp format differ.

  • places.sqlite is the combined history and bookmarks store. The moz_places, moz_historyvisits and moz_bookmarks tables carry visits, visit types and the bookmark tree. Visit timestamps are PRTime: microseconds since the Unix epoch (1 January 1970 UTC), one thousand times Unix time.
  • cookies.sqlite mirrors Chromium Cookies.
  • formhistory.sqlite stores typed form values keyed to field name, which is the Firefox equivalent of Chromium autofill.
  • key4.db and logins.json together hold saved credentials. logins.json carries the encrypted username and password blobs; key4.db carries the master key, itself wrapped by the user's primary password if one is set. Without a primary password the credentials are recoverable offline; with one the examiner needs the password.
  • sessionstore.jsonlz4 carries open tabs and session state, compressed with the Mozilla mozlz4 variant of LZ4. Decompression needs lz4json (the Python tool) or the equivalent JavaScript routine; ordinary lz4 will reject the file because of the leading "mozLz40\0" magic.

Safari keeps its profile under ~/Library/Safari on macOS only. The core stores are SQLite and plist.

  • History.db carries the visit history. The schema is small (history_items, history_visits) and the timestamps are Cocoa time (seconds since 1 January 2001 UTC). Conversion is unix_seconds = cocoa_value + 978307200.
  • TopSites.plist carries the Top Sites tiles.
  • Bookmarks.plist carries the bookmark tree.
  • Downloads.plist carries downloads with their original URLs and target paths.
  • LastSession.plist carries the session-restore state.

Edge ships Chromium under a Microsoft skin and writes the same layout under User Data. Adding to the Chromium baseline, Edge writes a Collections store (SQLite) and a Wallet store; on managed Indian banking-fraud cases where the suspect is a corporate user, Edge's enterprise-sync flags in Preferences often point to a corresponding Microsoft 365 tenant whose admin logs are themselves a parallel evidence source.

Artefact roleChrome / Edge / BraveFirefoxSafari
HistoryHistory (SQLite)places.sqliteHistory.db
CookiesCookies (SQLite)cookies.sqliteCookies.binarycookies
Saved credentialsLogin Data (SQLite, DPAPI/Keychain/libsecret)key4.db + logins.json (primary password optional)Keychain (not in Safari profile)
AutofillWeb Data (SQLite)formhistory.sqlite(via Keychain)
Session stateSessions folder (Current/Last)sessionstore.jsonlz4LastSession.plist
BookmarksBookmarks (JSON)places.sqliteBookmarks.plist
Local StorageLevelDBwebappsstore.sqliteLocalStorage/<host>.localstorage
Timestamp epochWebKit (1601 UTC, microseconds)PRTime (1970 UTC, microseconds)Cocoa (2001 UTC, seconds)

The cross-link to remember is the operating-system layer that backs these stores. Saved credentials on Safari, and to some extent on Chrome for macOS, are not in the browser profile at all; they sit in the macOS Keychain. The acquisition strategy on macOS therefore differs from Windows because the keychain database (login.keychain-db) is the credential source, not the browser file. See our macOS Forensic Artefacts topic for the keychain workflow end to end.

Chrome / Edge / Brave(WebKit)Firefox (PRTime)Safari (Cocoa)Epoch anchor1 January 1601 UTC1 January 1970 UTC1 January 2001 UTCStorage unitMicrosecondsMicrosecondsSecondsKey DB fileHistory, Cookies, LoginDataplaces.sqlite,cookies.sqliteHistory.dbTo Unix seconds(value / 1000000) minus11644473600value / 1000000 (alreadyUnix-based)value plus 978307200
Three browser timestamp epochs: Chrome WebKit (1601 anchor), Firefox PRTime (1970 Unix), Safari Cocoa (2001 anchor). Each column shows the epoch anchor, storage unit, and the formula to convert a raw database value to Unix seconds.

Session recovery, incognito and live-session takeover

Incognito and private browsing modes prevent the browser from writing to its own profile, but they do not suppress writes to the operating system, network layer, or any third-party agent on the host. A thorough examination accounts for each of these layers.

What survives an incognito session on Windows:

  • DNS cache in the Windows DNS Client Resolver Cache (ipconfig /displaydns on a live system; the cache lives in memory and is lost on reboot but is rich for a live machine).
  • Pagefile.sys and hiberfile.sys which routinely capture browser process memory and therefore URL strings, form values and even page text. Strings analysis on these files after acquisition often recovers incognito URLs verbatim.
  • Memory image taken from a live machine carries the same content as the pagefile, only fresher.
  • Registry MUICache and UserAssist which record process launches with timestamps, including private-mode browser launches.
  • Prefetch files which record process executions on Windows client SKUs (Server SKUs disable prefetch by default).
  • Event Logs which carry process-creation records when audit-process-creation is enabled (Sysmon, AppLocker and recent Defender configurations switch this on by default in many Indian government and PSU images).
  • Antivirus and EDR telemetry which often retain visited-URL telemetry independent of the browser profile.
  • Network-layer logs at the gateway: corporate proxy logs, ISP NetFlow, hotspot logs all see the request regardless of incognito state.

Session recovery is the other half of this section. A cookie file collected from a live browser, together with the Sessions folder and a snapshot of Local Storage and IndexedDB, can be replayed into a fresh browser to resume the suspect's logged-in session. This matters in two scenarios. First, suspect-at-the-console arrest cases where the live machine is open to WhatsApp Web, the bank account, or the cloud workspace. Second, court-authorised intercept where the warrant covers continued access to a service that the suspect has already logged into. The forensic playbook is to image the running profile cold (not after closing the browser), preserve the Sessions folder and Local Storage in particular, and only then shut the machine down. In the Indian banking-phishing prosecutions of 2023-2024 (HDFC and ICICI lookalike-domain rings), the prosecution case in several charge sheets cited replayable session cookies recovered from suspect endpoints as corroboration of the operator's role; the evidentiary path used the Section 63 BSA certificate over the imaged profile and a separate certificate over the analyst's worksheet.

Tooling, reporting and the Section 63 BSA certificate

A typical browser forensics workflow combines a SQLite GUI, a Chromium profile parser, and a cache viewer.

  • DB Browser for SQLite is the workhorse SQLite GUI. Reads History, Cookies, Login Data, Web Data and the Firefox SQLite stores directly. Useful for ad-hoc queries; weak at timestamp conversion (no auto WebKit/PRTime/Cocoa handling).
  • Hindsight is the NIST-aligned Chromium parser. Walks History, Cookies, Login Data metadata, Local Storage, Downloads and Cache, normalises timestamps to UTC, and emits CSV, JSONL and XLSX. The single most useful tool for a Chrome timeline.
  • ChromeCacheView (NirSoft) renders the Chrome HTTP cache as a file table with the original URLs and lets you extract response bodies.
  • NirSoft BrowsingHistoryView does a quick parallel parse across Chrome, Firefox, Edge and Internet Explorer for triage.
  • Magnet AXIOM is the commercial integrated platform that most central and state cyber-forensic units in India use; AXIOM Browser modules parse Chromium, Firefox and Safari with one workflow.
  • BrowserHistoryCapturer and BrowserHistoryViewer (Foxton) are paired tools for a live or dead acquisition and review.
  • ChromeForensic is a smaller open-source script set used in academic labs.
  1. Plan acquisition before touching the device
    Decide live, dead or both. Live capture is needed if Sessions, Local Storage or IndexedDB are evidentiary. Dead capture suffices for History and Cookies on a powered-off machine.
  2. Image the profile with hashes
    Copy the User Data directory (or the Firefox profile or ~/Library/Safari) with all sidecar files (journal, WAL, shm). SHA-256 every file. Record the listing in the chain-of-custody log.
  3. Parse with Hindsight or equivalent
    Run the parser against a working copy, never the original. Verify hashes match before and after.
  4. Cross-validate against a second tool
    Re-parse with AXIOM or NirSoft BHV. Note any deltas and explain them in the report. A two-tool result is harder to challenge under Section 39 BSA cross-examination.
  5. Draft the Section 63 BSA certificate
    Identify the records, describe the device and the imaging method, state that the device was operating normally, sign as the responsible official. Cross-reference our BSA topic for the certificate template.
  6. Annexe to the BNSS Section 193 charge sheet
    The report and certificate travel with the FSL annexures. The trial court reads them in through Section 39 BSA deposition.

The Section 63 BSA workflow for browser-extracted evidence mirrors the workflow for any other electronic record: the original electronic record (the source device) does not need a certificate, but every copy produced in court does. The forensic image of the User Data directory is a copy; the Hindsight CSV exported from that image is a copy of a copy; both need a Section 63 certificate, and the safer practice is for the responsible official (typically the senior analyst or the section head) to certify the source image rather than the downstream artefacts. See our BSA Section 63 topic for the certificate template and the leading case law (Anvar P V; Arjun Pandit Rao Khotkar).

A practical Indian cross-link to keep in mind: browser artefacts in phishing prosecutions almost always sit next to email artefacts. The phishing message arrived by email; the click trail lives in the browser. The two evidence streams are read together. See our Email Forensics topic for the header-tracing methodology that pairs with browser analysis.

Practice
Question 1 of 5· 0 answered

Chromium History timestamps are stored as:

Frequently asked questions

Where is the Chrome profile on Windows, macOS and Linux?
Windows: %USERPROFILE%\AppData\Local\Google\Chrome\User Data\Default\. macOS: ~/Library/Application Support/Google/Chrome/Default/. Linux: ~/.config/google-chrome/Default/. The Default folder is the first profile; additional profiles sit in Profile 1, Profile 2 and so on. Edge, Brave and Opera follow the same User Data layout under their own vendor folders.
What are the core SQLite databases inside a Chromium profile?
History (URLs, downloads, search terms, segments), Cookies, Login Data (saved credentials, encrypted), Web Data (autofill and credit cards), Top Sites and Network Action Predictor. Each answers a different investigative question; the Network Action Predictor is the one most often forgotten and the one that records typed input that triggered autocomplete even when the user never pressed Enter.
How are Chromium History timestamps converted to UTC?
Chromium uses WebKit time, microseconds since 1 January 1601 UTC. The conversion is unix_seconds = (webkit_value / 1000000) - 11644473600, and a human-readable UTC string is then produced from the Unix seconds. Hindsight does this automatically; DB Browser for SQLite does not.
Can incognito or private browsing leave forensic traces?
Yes. The browser does not write to its own profile during incognito, but DNS cache, pagefile.sys, hiberfile.sys, memory, registry MUICache and UserAssist, prefetch on client SKUs, EDR telemetry, and any gateway, proxy or ISP log can retain the activity. The standard examiner line is that incognito reduces in-profile traces, not system-wide traces.
What is the best free tool for parsing a Chrome profile?
Hindsight, by Ryan Benson, is the workhorse open-source Chromium parser. It walks History, Cookies, Local Storage, IndexedDB metadata, Downloads, Login Data metadata and Cache; normalises WebKit timestamps to UTC; and emits CSV, JSONL and XLSX. NirSoft BrowsingHistoryView and ChromeCacheView are useful triage companions. AXIOM is the integrated commercial option used by most Indian state cyber-forensic units.
How does Section 63 BSA apply to browser-extracted evidence in Indian trials?
Section 63 of the Bharatiya Sakshya Adhiniyam 2023 (the successor to IEA Section 65B) requires a statutory certificate for admissibility of a copy of an electronic record. The forensic image of a browser profile is a copy; the Hindsight CSV is a copy of a copy. The Section 63 certificate is signed by the responsible official in relation to the operation of the device, identifies the record with hashes, describes the imaging method, and states that the device was working properly. Anvar P V v P K Basheer and Arjun Pandit Rao Khotkar are the leading judgments. See our [BSA topic](/topics/crime-scene-management/bharatiya-sakshya-adhiniyam-forensic-evidence-in-court) for the full template.
Where do WhatsApp Web and Telegram Web store their session in the browser?
In IndexedDB (LevelDB-backed) under the origin's folder inside the User Data directory: web.whatsapp.com for WhatsApp, web.telegram.org for Telegram. The store includes the cached message log and the session token. Imaging a live profile and replaying it into a fresh browser can resume the logged-in session, which is why live-acquisition discipline matters in suspect-at-the-console arrests.

Test yourself on Digital Forensics with free, timed mocks.

Practice Digital Forensics questions

Found this useful? Pass it along.

Share

Spotted an error in this page? Report a correction or read our editorial standards.

Your journey to becoming a forensic professional starts here.

Practice with mock tests, learn from structured notes, and get your questions answered by a global forensic community, all in one place.