Cookie, Session và Dấu vân tay trình duyệt: Ba lớp nhận diện khác nhau như thế nào?
Bạn mở tab ẩn danh (incognito) trên Chrome, vào một trang web, và vài phút sau quảng cáo về đúng sản phẩm bạn vừa xem hiện lên ở trang khác. Tab ẩn danh không lưu cookie, không giữ session, vậy thông tin gì bị rò rỉ?
Câu trả lời nằm ở một cơ chế nhận diện hoạt động song song với cookie và session — dấu vân tay trình duyệt (browser fingerprint). Ba khái niệm này thường bị gộp chung thành "cách web theo dõi bạn", nhưng chúng hoạt động ở ba tầng hoàn toàn khác nhau: client, server, và kết cấu kỹ thuật của chính trình duyệt.
Bài viết này tách ba khái niệm ra riêng, giải thích cơ chế kỹ thuật của từng cái, và chỉ ra điểm khác biệt quan trọng nhất — đặc biệt là khi bạn cần quản lý nhiều tài khoản trên cùng một máy.
Cookie: Dữ liệu lưu trên máy bạn
Cookie là một đoạn text nhỏ mà server gửi về và trình duyệt lưu lại trên ổ cứng của bạn. Mỗi lần bạn gửi request tới cùng domain, trình duyệt tự động đính kèm cookie tương ứng. Nó không phải chương trình, không thực thi code — chỉ là cặp key-value nho nhỏ.
Có hai loại chính:
Session cookie — không có thuộc tính Expires hoặc Max-Age. Trình duyệt giữ nó trong bộ nhớ RAM và xoá sạch khi bạn đóng cửa sổ. Đây là cách phổ biến nhất để duy trì trạng thái đăng nhập trong một phiên làm việc.
Persistent cookie — có ngày hết hạn rõ ràng. Ví dụ nút "Ghi nhớ đăng nhập" thường đặt một cookie tồn tại 30–90 ngày. Các cookie theo dõi quảng cáo (third-party cookie) cũng thuộc nhóm này, với thời hạn có thể lên tới 1–2 năm.
Một đặc điểm kỹ thuật quan trọng: cookie bị giới hạn theo domain. Trình duyệt chỉ gửi cookie của domain a.com khi bạn request tới a.com. Đây là cơ chế bảo mật cơ bản gọi là Same-Origin Policy áp dụng cho cookie. Tuy nhiên, third-party cookie (đặt bởi domain khác thông qua iframe hoặc resource nhúng) từng là lỗ hổng lớn cho quảng cáo xuyên trang, đến mức Safari và Firefox đã chặn mặc định, và Chrome đang dần thu hẹp.
Cookie có thể xoá. Bạn vào cài đặt trình duyệt, nhấn "Clear browsing data", và mọi cookie biến mất. Đây là điểm then chốt tạo ra sự khác biệt với hai khái niệm phía dưới.
Session: Phiên làm việc phía server
Nếu cookie là dữ liệu lưu ở phía bạn, thì session là dữ liệu lưu ở phía server. Khi bạn đăng nhập, server tạo một đối tượng session trong bộ nhớ (hoặc trong Redis, database — tuỳ kiến trúc), chứa thông tin như user ID, quyền truy cập, giỏ hàng, v.v.
Vấn đề là: HTTP là giao thức stateless — mỗi request độc lập, server không tự biết request này và request trước đến từ cùng một người. Server cần một cách để liên kết các request lại với nhau.
Giải pháp: server tạo một chuỗi ngẫu nhiên (ví dụ JSESSIONID=d8a7f3...), gửi nó về cho trình duyệt dưới dạng cookie. Mỗi request tiếp theo, trình duyệt đính kèm cookie này, server đọc session ID, tra cứu session data trong bộ nhớ của mình.
Bạn có thể tưởng tượng session như một tủ đồ tại nhà hàng. Bạn nhận một chìa khoá (session ID trong cookie), đồ đạc của bạn nằm trong tủ (session data trên server). Mất chìa khoá thì đồ vẫn ở đó nhưng không ai biết nó của ai — session trở nên mồ côi.
Session có vòng đời:
- Tạo: khi user đầu tiên gửi request (không cần đăng nhập — nhiều framework tạo session ngay khi bạn vào trang).
- Kích hoạt: khi server ghi dữ liệu vào session.
- Hết hạn: sau thời gian không hoạt động (thường 15–30 phút), server tự xoá session để giải phóng bộ nhớ.
Khi bạn nhấn "Đăng xuất", server gọi session.destroy() hoặc tương đương, xoá dữ liệu khỏi bộ nhớ. Cookie chứa session ID vẫn còn trên máy bạn, nhưng chuỗi đó không còn trỏ tới gì cả — nó thành rác.
Điểm khác biệt cốt lõi với cookie: session data không bao giờ rời server. Bạn không thể đọc nội dung session bằng JavaScript trên trình duyệt. Bạn chỉ giữ session ID, và chính cái ID đó cũng chỉ là một chuỗi vô nghĩa nếu server không công nhận nó.
Dấu vân tay trình duyệt: Lớp nhận diện bạn không thấy
Cookie và session đều cần sự hợp tác của trình duyệt: trình duyệt lưu cookie, trình duyệt gửi cookie đi, và bạn có thể xoá cookie bất cứ lúc nào. Dấu vân tay trình duyệt hoạt động theo nguyên lý hoàn toàn khác — nó đọc những đặc tính kỹ thuật mà trình duyệt mặc định phơi bày mỗi khi tải trang.
Khi bạn mở một trang web, trình duyệt gửi đi hàng chục thông số kỹ thuật mà không cần hỏi bạn. User-Agent là chuỗi dài dạng Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36..., mô tả hệ điều hành và phiên bản trình duyệt. Độ phân giải màn hình — ví dụ 1920×1080. Múi giờ — Asia/Ho_Chi_Minh (UTC+7). Ngôn ngữ — vi-VN, en-US. Canvas rendering là hàm hash của pixel data khi trình duyệt vẽ hình trên phần tử <canvas>, và đây là một trong những thông số có entropy cao nhất. WebGL trả về tên GPU, vendor, và thông số renderer. Audio context phản ánh đặc trưng xử lý tín hiệu audio của phần cứng. Danh sách font cài đặt — Arial, Times New Roman, Calibri, Segoe UI... — mỗi máy có một tập hợp riêng. Plugin và extension đã cài cũng bị liệt kê. Keyboard layout — Vietnamese, US QWERTY... — một thông số ít người để ý nhưng vẫn được thu thập.
Mỗi thông số riêng lẻ không độc đáo. Hàng triệu người dùng Windows 10, độ phân giải 1920×1080, múi giờ UTC+7. Nhưng khi ghép 10–15 thông số lại với nhau, xác suất hai trình duyệt có cùng tổ hợp giảm xuống rất nhanh.
Nghiên cứu Panopticlick của EFF cho thấy khoảng 1 trong 286,777 trình duyệt có dấu vân tay trùng khớp. Nghĩa là nếu bạn kết nối Canvas fingerprint + WebGL + danh sách font + độ phân giải + timezone, bạn đã gần như định danh được một thiết bị duy nhất — không cần cookie, không cần session, không cần IP.
Cơ chế này đáng sợ ở chỗ:
Không cần phép. Không có popup hỏi "Cho phép dấu vân tay?" — trình duyệt tự gửi các thông số này như một phần bình thường của quá trình tải trang.
Không thể xoá. Bạn xoá cookie, đóng tab ẩn danh, khởi động lại máy — Canvas vẫn render cùng cách, GPU vẫn trả cùng thông số, danh sách font vẫn không đổi. Dấu vân tay tồn tại chừng nào cấu hình phần cứng và phần mềm của bạn không đổi.
Xuyên qua VPN. VPN đổi IP nhưng không đổi Canvas hash, không đổi WebGL renderer, không đổi danh sách font. Theo nghiên cứu, fingerprint vẫn nhận diện được user ngay cả khi họ bật VPN.
Không cần thư viện ngoài, không cần API đặc biệt. Đoạn code trên chạy yên lặng trên mọi trình duyệt hiện đại, và kết quả hash gần như không đổi giữa các lần tải trang trên cùng một máy.
Ba khái niệm so sánh trực tiếp
Về nơi lưu trữ, cookie nằm trên máy người dùng, session nằm trên server, còn dấu vân tay không "lưu" ở đâu cả — nó được tính toán real-time mỗi khi trình duyệt tải trang. Về người kiểm soát, bạn có thể xoá cookie bất cứ lúc nào, server tạo và huỷ session theo ý mình, nhưng dấu vân tay thì không ai hỏi ý kiến bạn — trình duyệt tự phơi bày các thông số kỹ thuật như một phần bình thường của quá trình duyệt web.
Về sự hợp tác của trình duyệt, cả cookie và session đều cần trình duyệt lưu và gửi đi (session thông qua cookie chứa session ID), trong khi dấu vân tay không cần sự hợp tác nào — nó đọc trực tiếp từ kết cấu trình duyệt đang chạy.
Điểm khác biệt sắc nét nhất nằm ở khả năng xuyên qua tab ẩn danh và VPN. Cookie bị xoá sạch khi đóng tab ẩn danh, session cũng mất khi tab đóng. VPN đổi IP nên cũng làm rối cookie theo dõi dựa trên địa chỉ mạng. Nhưng dấu vân tay thì không — Canvas vẫn render cùng cách, GPU vẫn trả cùng thông số, danh sách font vẫn không đổi, bất kể bạn bật VPN hay mở tab ẩn danh.
Cuối cùng, về khả năng xoá: cookie xoá được qua cài đặt trình duyệt, session kết thúc khi bạn đăng xuất, nhưng dấu vân tay không thể xoá trực tiếp — bạn chỉ có thể thay đổi nó bằng cách sửa cấu hình phần cứng, phần mềm, hoặc dùng công cụ chuyên dụng can thiệp vào tầng kernel của trình duyệt.
Về mục đích sử dụng: cookie lưu tùy chọn người dùng, giỏ hàng, token xác thực; session duy trì trạng thái đăng nhập phía server; dấu vân tay được dùng để nhận diện và thu thập hồ sơ người dùng ở chế độ nền.
Khi ba lớp phối hợp với nhau
Các nền tảng lớn không dùng riêng lẻ. Facebook đăng nhập ghi cookie vào máy bạn, tạo session trên server, và đồng thời chạy fingerprint thu thập ở chế độ nền. Khi bạn mở thêm một tài khoản khác trên cùng trình duyệt — dù trong tab riêng — fingerprint vẫn giống hệt.
Thuật toán phát hiện liên kết tài khoản (account linking) của các nền tảng quét một tập chỉ số. Nếu hai tài khoản chia sẻ cùng Canvas hash, cùng WebGL renderer, cùng danh sách font, cùng độ phân giải màn hình — ngay cả khi IP khác nhau, cookie khác nhau, session khác nhau — hệ thống vẫn có khả năng cao đánh dấu hai tài khoản này thuộc về cùng một người.
Đây là lý do nhiều người quản lý nhiều tài khoản gặp vấn đề: họ xoá cookie, dùng tab riêng, thậm chí dùng proxy khác cho từng tài khoản, nhưng vẫn bị liên kết. Lỗ hổng không nằm ở cookie hay session — nằm ở fingerprint.
Kiểm soát dấu vân tay: Các hướng tiếp cận
Nếu bạn quản lý nhiều tài khoản trên cùng một máy (e-commerce, marketing, SEO), việc kiểm soát dấu vân tay trở thành yêu cầu kỹ thuật, không chỉ là vấn đề riêng tư.
Cách tự làm: dùng cờ --user-data-dir của Chromium để tạo profile riêng, kết hợp với máy ảo cho mỗi tài khoản. Cách này tách được cookie và localStorage, nhưng Canvas fingerprint, WebGL renderer, danh sách font vẫn giống nhau trên cùng hệ điều hành. Bạn có thể cài thêm extension spoof fingerprint, nhưng nhiều extension chỉ giả lập User-Agent và timezone — không chạm tới Canvas hay Audio context, hai cái có entropy cao nhất.
Nếu bạn chỉ có ba-bốn tài khoản, tự làm bằng máy ảo là đủ rồi. Đừng mua thêm gì cả.
**Cách dùng trình duyệt chuyên dụng: **một số trình duyệt antidetect sửa sâu ở tầng kernel của Chromium/Firefox — không chỉ thay đổi User-Agent mà ghi đè Canvas rendering, WebGL parameter, Audio context ở cấp độ C++ source code, sao cho mỗi profile tạo ra một bộ thông số nhất quán và khác biệt. Khi kết hợp với proxy, fingerprint sinh ra có thể đồng bộ với geo của IP (timezone, ngôn ngữ, cấu hình khu vực). BitBrowser là một trong những công cụ đi theo hướng này — sửa kernel Google và Firefox, sinh fingerprint dựa trên proxy, có Local API để tự động hoá bằng script. Nhưng đây không phải lựa chọn duy nhất; tự viết script điều khiển Selenium cũng được, chỉ là bạn phải tự lo phần Canvas và WebGL — cái khó nhất.
Cần nhấn mạnh: không có công cụ nào đảm bảo fingerprint "hoàn toàn không phát hiện được". Nền tảng phát hiện cũng nâng cấp liên tục. Điều bạn có thể làm là giảm xác suất trùng khớp fingerprint giữa các profile xuống mức chấp nhận được cho use case cụ thể của bạn.
Lời kết
Cookie là dữ liệu bạn cầm trên tay — xoá được, quản lý được. Session là trạng thái server giữ thay bạn — kết thúc khi đăng xuất. Dấu vân tay là tập hợp đặc tính kỹ thuật trình duyệt tự phơi bày mỗi khi tải trang — không cần phép, không xoá được, xuyên qua VPN và tab ẩn danh.
Ba khái niệm này không thay thế nhau mà cộng hưởng. Cookie cho biết "bạn đã đăng nhập", session cho biết "bạn là ai trên server", và fingerprint cho biết "bạn đang dùng máy nào". Khi bạn xoá cookie và session, bạn chỉ xoá được hai tầng đầu. Tầng thứ ba vẫn ở đó.
Hiểu được sự khác biệt này là điều kiện tiên quyết nếu bạn quản lý nhiều tài khoản hoặc quan tâm đến mức độ rò rỉ thông tin khi duyệt web. Phần còn lại — dùng công cụ nào, tự làm hay thuê — là quyết định dựa trên quy mô và ngân sách của riêng bạn.
All rights reserved