Cookie là gì?

Web được thiết kế để mọi yêu cầu từ trình duyệt web đến trang web đều tách biệt. Theo thiết kế, web không có "bộ nhớ". Mỗi khi bạn mở một trang web, trang web bạn đang truy cập sẽ không thể ghi nhớ thông tin từ phiên hoạt động gần đây nhất của bạn. Điều này giúp web trở nên hiệu quả và đơn giản, vì không cần có cơ chế để theo dõi các yêu cầu và phản hồi.

Tuy nhiên, bản chất dễ quên của web cũng gây ra vấn đề. Ví dụ: giỏ hàng có thể hoạt động như thế nào nếu trang web bạn đang truy cập không thể nhớ những gì bạn vừa đặt vào giỏ hàng?

Cookie được phát minh để giải quyết vấn đề đó.

Cookie cung cấp bộ nhớ cho trang web

Khi bạn truy cập một trang trên trang web, trình duyệt web sẽ gửi yêu cầu đến máy chủ của trang web để lấy các tài nguyên có trên trang, chẳng hạn như HTML, CSS, JavaScript hoặc hình ảnh.

Trình duyệt web và trang web tương tác bằng cách tuân theo giao thức HTTP. Đây là bộ quy tắc chuẩn hoá để giao tiếp.

Để phản hồi yêu cầu HTTP về một tài nguyên, máy chủ trang web có thể thêm thông tin bổ sung được gọi là tiêu đề cùng với chính tài nguyên đó. Tiêu đề Set-Cookie đi kèm với phản hồi HTTP sẽ yêu cầu trình duyệt lưu trữ một số văn bản: tên và giá trị. Đây được gọi là cookie. Ví dụ: tiêu đề phản hồi Set-Cookie:cat=tabby sẽ yêu cầu trình duyệt lưu trữ một cookie có tên "cat" và giá trị "tabby".

Sau khi bạn đặt cookie đó, các yêu cầu tiếp theo từ trình duyệt của bạn đến trang web sẽ bao gồm tiêu đề Cookie:cat=tabby. Máy chủ của trang web có thể truy cập vào cookie từ tiêu đề yêu cầu và sử dụng giá trị đó.

Cách hoạt động của cookie: từng bước

Hãy tưởng tượng bạn truy cập vào trang web cats.example. Trang web muốn hiển thị cho bạn một hình ảnh ngẫu nhiên về một chú mèo và ghi lại chú mèo nào đã được hiển thị cho bạn.

Các bước sau đây giải thích cách thực hiện việc đó bằng cookie.

1. Trình duyệt yêu cầu một tệp

Bạn truy cập vào trang chủ của trang web cats.example.

Trình duyệt của bạn yêu cầu các tệp trên trang, bao gồm cả cat.jpg từ cats.example.

Yêu cầu HTTP đến https://cats.example/cat.jpg

2. Máy chủ trang web phản hồi

Máy chủ tại cats.example phản hồi bằng tệp hình ảnh cat.jpg.

Với phản hồi này, máy chủ sẽ thêm một tiêu đề: Set-Cookie:cat=tabby.

Phản hồi HTTP từ https://cats.example/cat.jpg, có tiêu đề Set-Cookie:cat=tabby

3. Trình duyệt nhận được phản hồi

Trình duyệt của bạn sẽ nhận được tệp hình ảnh và xử lý tiêu đề Set-Cookie:cat=tabby đi kèm.

Một cookie được lưu trữ: tên cat, giá trị tabby.

Cookie cat=tabby trong trình duyệt web trên máy tính xách tay.

4. Trình duyệt gửi thêm yêu cầu

Từ giờ trở đi, trình duyệt của bạn sẽ thêm tiêu đề Cookie:cat=tabby với các yêu cầu đến cats.example.

Yêu cầu HTTP đến https://cats.example/cat.jpg, có tiêu đề Cookie:cat=tabby

Khi nhận được yêu cầu, máy chủ web cats.example có thể xử lý cookie và làm bất cứ điều gì nó muốn với giá trị đó, chẳng hạn như đảm bảo không gửi lại cho bạn hình ảnh của cùng một chú mèo tam thể.

Dưới đây là toàn bộ quy trình của cookie:

  1. Trình duyệt của bạn gửi yêu cầu đến một trang web để tải tệp.
  2. Máy chủ của trang web có thể bao gồm một tiêu đề như Set-Cookie:cat=tabby cùng với tệp mà máy chủ gửi để phản hồi yêu cầu.
  3. Khi nhận được phản hồi, trình duyệt sẽ lưu trữ cookie.
  4. Với mỗi yêu cầu tiếp theo, trình duyệt sẽ gửi cookie đến máy chủ trong tiêu đề Cookie:cat=tabby.


Sơ đồ trình tự cho thấy các yêu cầu và phản hồi giữa trình duyệt web, cats.example và cats.example, cho thấy cách đặt và gửi cookie.

Truy cập cookie bằng JavaScript

Ví dụ trước sử dụng tiêu đề phản hồi Set-Cookie để đặt cookie.

Bạn cũng có thể tạo cookie bằng JavaScript thông qua phương thức document.cookie.

Hãy thử bản minh hoạ: javascript-cookie.glitch.me/.

Tìm hiểu thêm: Tài liệu: thuộc tính cookie.

Tại sao chúng ta cần cookie?

Năm 1994, kỹ sư Lou Montulli làm việc tại công ty phần mềm Netscape. Công ty này đã xây dựng trình duyệt web phổ biến nhất vào giữa những năm 1990. Trong khi đó, một tập đoàn viễn thông, MCI, đang cố gắng xây dựng một tính năng giỏ hàng cho một trong những cửa hàng trực tuyến đầu tiên trên thế giới. MCI đã liên hệ với Montulli để giải thích vấn đề của họ. Montulli đã phản hồi bằng cách thêm một tính năng vào HTTP cho phép trang web lưu trữ một lượng nhỏ văn bản trên trình duyệt web của người dùng, một tên và một giá trị: chẳng hạn như cart-id=123. Ông gọi đó là "cookie", vì vào thời đó, các lập trình viên dùng từ "cookie ma thuật" để chỉ một phần thông tin bổ sung nhỏ đi kèm với hoạt động giao tiếp dữ liệu.

Lou đã hoàn thành công việc về cookie HTTP trong chưa đầy một tuần. Ông không biết rằng cookie sẽ là nền tảng cho hoạt động quảng cáo, đăng nhập, thanh toán, phát hiện gian lận và các dịch vụ web quan trọng khác. Cookie là một công nghệ rất đơn giản nhưng lại có tác động sâu rộng.

Mục đích sử dụng cookie

Cookie cho phép trình duyệt lưu trữ một lượng nhỏ thông tin về người dùng để "ghi nhớ" một số thông tin trên nhiều yêu cầu. Cookie có nhiều mục đích sử dụng:

  • Quản lý phiên
    Cho phép trang web nhận dạng người dùng, chẳng hạn như để duy trì trạng thái đã đăng nhập trên nhiều trang.
  • Cá nhân hoá
    Lưu trữ các lựa chọn ưu tiên của người dùng, chẳng hạn như ngôn ngữ, giao diện hoặc các mục đã xem gần đây, để tuỳ chỉnh trải nghiệm trên trang web.
  • Theo dõi
    Theo truyền thống, cookie được dùng để theo dõi hành vi của người dùng trên các trang web, cho quảng cáo được nhắm mục tiêu và các trường hợp sử dụng khác.

Thay vào đó, cookie thường được dùng để lưu trữ và truyền đạt các giá trị nhận dạng do máy chủ xử lý. Ví dụ: một tiêu đề có yêu cầu đến dịch vụ phân tích web có thể bao gồm một cookie như sau:

Cookie: _analytics=ANALYTICS1.2.34567890.123456789

Máy chủ phân tích nhận được yêu cầu có thể xử lý giá trị nhận dạng cùng với các thông tin khác về trang.

Tìm hiểu thêm