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:
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.
- 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.
| Browser | Engine family | Profile root (Windows) | Profile root (macOS) | Profile root (Linux) |
|---|---|---|---|---|
| Chrome | Chromium / Blink | %USERPROFILE%\AppData\Local\Google\Chrome\User Data\Default\ | ~/Library/Application Support/Google/Chrome/Default/ | ~/.config/google-chrome/Default/ |
| Edge | Chromium / Blink | %USERPROFILE%\AppData\Local\Microsoft\Edge\User Data\Default\ | ~/Library/Application Support/Microsoft Edge/Default/ | ~/.config/microsoft-edge/Default/ |
| Brave | Chromium / Blink | %USERPROFILE%\AppData\Local\BraveSoftware\Brave-Browser\User Data\Default\ | ~/Library/Application Support/BraveSoftware/Brave-Browser/Default/ | ~/.config/BraveSoftware/Brave-Browser/Default/ |
| Firefox | Gecko | %APPDATA%\Mozilla\Firefox\Profiles\<rand>.default-release\ | ~/Library/Application Support/Firefox/Profiles/<rand>.default-release/ | ~/.mozilla/firefox/<rand>.default-release/ |
| Safari | WebKit | (macOS only) | ~/Library/Safari/ | (not applicable) |
| Opera | Chromium / 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.
| File | Key tables | What it proves | Timestamp format |
|---|---|---|---|
| History | urls, visits, visit_source, downloads, downloads_url_chains, keyword_search_terms, segments | URLs visited, search terms typed into the omnibox, downloads with target paths and referrers, frequency segments | WebKit time (microseconds since 1 January 1601 UTC) |
| Cookies | cookies (host_key, name, encrypted_value, creation_utc, expires_utc, last_access_utc) | Logged-in sessions, persistent identifiers, ad tracking, banking session cookies | WebKit time |
| Login Data | logins (origin_url, username_value, password_value (encrypted), date_created, date_last_used) | Saved credentials and which sites the user authenticated to | WebKit time |
| Web Data | autofill, autofill_profiles, credit_cards (encrypted), keywords | Names, addresses, phone numbers, partial card numbers offered by autofill | WebKit time |
| Top Sites | top_sites (url, rank, last_updated) | Frequently visited sites composite ranking | WebKit time |
| Network Action Predictor | network_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.
- Acquire the profile directory coldImage 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.
- Verify integrity at acquisitionHash every file (SHA-256) and write the hash list into the chain-of-custody log. The Section 63 BSA certificate will reference these hashes.
- Open History first, then CookiesBuild the URL timeline before reading the cookie state. The cookie state is meaningful only relative to the visits that set it.
- Walk the CacheMap cache keys back to URLs in History. Extract response bodies for phishing-page or download evidence.
- Open Local Storage and IndexedDBThese are LevelDB stores; read them with leveldb-py or the Hindsight LevelDB module. WhatsApp Web and Telegram Web tokens sit here.
- Walk the Sessions folderCurrent 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.

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 role | Chrome / Edge / Brave | Firefox | Safari |
|---|---|---|---|
| History | History (SQLite) | places.sqlite | History.db |
| Cookies | Cookies (SQLite) | cookies.sqlite | Cookies.binarycookies |
| Saved credentials | Login Data (SQLite, DPAPI/Keychain/libsecret) | key4.db + logins.json (primary password optional) | Keychain (not in Safari profile) |
| Autofill | Web Data (SQLite) | formhistory.sqlite | (via Keychain) |
| Session state | Sessions folder (Current/Last) | sessionstore.jsonlz4 | LastSession.plist |
| Bookmarks | Bookmarks (JSON) | places.sqlite | Bookmarks.plist |
| Local Storage | LevelDB | webappsstore.sqlite | LocalStorage/<host>.localstorage |
| Timestamp epoch | WebKit (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.
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.
- Plan acquisition before touching the deviceDecide 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.
- Image the profile with hashesCopy 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.
- Parse with Hindsight or equivalentRun the parser against a working copy, never the original. Verify hashes match before and after.
- Cross-validate against a second toolRe-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.
- Draft the Section 63 BSA certificateIdentify 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.
- Annexe to the BNSS Section 193 charge sheetThe 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.
Chromium History timestamps are stored as:
Frequently asked questions
Where is the Chrome profile on Windows, macOS and Linux?
What are the core SQLite databases inside a Chromium profile?
How are Chromium History timestamps converted to UTC?
Can incognito or private browsing leave forensic traces?
What is the best free tool for parsing a Chrome profile?
How does Section 63 BSA apply to browser-extracted evidence in Indian trials?
Where do WhatsApp Web and Telegram Web store their session in the browser?
Test yourself on Digital Forensics with free, timed mocks.
Practice Digital Forensics questionsSpotted an error in this page? Report a correction or read our editorial standards.