Khi phản hồi một yêu cầu về tài nguyên, máy chủ web có thể thêm tiêu đề Set-Cookie
cùng với phản hồi của mình. Tiêu đề đó yêu cầu trình duyệt của bạn lưu trữ một cookie. Ví dụ: Set-Cookie:cat=tabby
.
Cookie là gì? giải thích cách cookie hoạt động.
Ngoài việc cung cấp tên và giá trị cookie, Set-Cookie
có thể bao gồm các thuộc tính để kiểm soát việc cookie được đặt hay không và thời điểm cookie hết hạn. Các thuộc tính cookie được phân tách bằng dấu chấm phẩy. Ví dụ:
Set-Cookie:cat=tabby; Secure; HTTPOnly; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
Tài liệu này giải thích các thuộc tính cookie quan trọng nhất:
Sử dụng cookie HTTP giải thích các thuộc tính cookie một cách chi tiết hơn về mặt kỹ thuật.
Bảo mật
Nếu tiêu đề Set-Cookie
có chứa Secure
, thì cookie sẽ chỉ được đưa vào các yêu cầu được mã hoá sử dụng giao thức HTTPS: cookie sẽ không được đưa vào các yêu cầu HTTP. Điều này có thể giúp ngăn chặn các cuộc tấn công trung gian, trong đó kẻ tấn công bí mật can thiệp vào hoạt động giao tiếp giữa trình duyệt và máy chủ – để truyền thông tin và có khả năng thay đổi thông tin đó.
HTTPOnly
Nếu tiêu đề Set-Cookie
có chứa HTTPOnly
, thì JavaScript không thể truy cập vào cookie, chẳng hạn như bằng cách sử dụng document.cookie
. Điều này giúp bảo vệ chống lại một số loại tấn công nhắm vào cookie.
SameSite
Yêu cầu về một tài nguyên từ một trang web khác với trang web mà bạn đang truy cập là một yêu cầu trên nhiều trang web. Cookie được đặt để phản hồi một yêu cầu trên nhiều trang web là cookie của bên thứ ba.
Thuộc tính SameSite
kiểm soát việc liệu cookie của bên thứ ba có được đưa vào yêu cầu hay không. Thuộc tính này có 3 giá trị có thể có: Strict
, Lax
hoặc None
.
Tìm hiểu thêm: Cookie của bên thứ ba là gì?
Nghiêm ngặt
Cookie sẽ chỉ được gửi để phản hồi các yêu cầu từ một trang trên trang web gốc của cookie. Ví dụ: giả sử một người dùng truy cập vào cats.example
và có một cookie được đặt bằng thuộc tính SameSite=Strict
. Sau đó, người dùng truy cập vào một trang web khác và nhấp vào một đường liên kết đến một trang trên cats.example
. Cookie đã được đặt sẽ không có trong yêu cầu đó.
Lax
Chế độ này hoạt động giống như Strict
, ngoại trừ việc trình duyệt cũng sẽ bao gồm cookie khi người dùng nhấp vào một đường liên kết đến trang web gốc của cookie. (Trong ví dụ Strict
trước đó, cookie sẽ được đưa vào khi người dùng nhấp vào đường liên kết đến cats.example
.) Lax
là giá trị mặc định nếu không có thuộc tính SameSite
nào được đưa vào tiêu đề Set-Cookie
.
Không có
Không có ràng buộc: cookie sẽ được đưa vào yêu cầu, cho dù đó là yêu cầu cross-site hay không. Với SameSite=None
, cookie cũng phải có thuộc tính Secure
.
Đã phân vùng
Thuộc tính này cho phép bạn chọn sử dụng cookie cho bộ nhớ được phân vùng, với một "hũ cookie" riêng biệt cho mỗi trang web cấp cao nhất. Cookie được khoá hai lần, theo trang web cấp cao nhất cũng như miền đặt cookie đó.
Ví dụ: giả sử cả trang web A và trang web B đều có một iframe từ trang web C. Iframe trên trang web A đặt một cookie được phân vùng mà iframe trên trang web B không thể truy cập: cookie AC tách biệt với cookie BC.
Cookie có thuộc tính Partitioned
được gọi là CHIPS: Cookie có trạng thái được phân vùng độc lập.
Cookie được phân vùng phải có thuộc tính Secure
.
Tìm hiểu thêm: Cookie có trạng thái được phân vùng độc lập.
Ngày hết hạn và Max-Age
Bạn có thể chỉ định ngày và giờ Expires
hoặc Max-Age
tính bằng giây, sau đó cookie sẽ bị xoá và không còn được gửi nữa. Ví dụ:
Set-Cookie:cat=tabby; Expires=Tue, 31 Dec 2999 23:59:59 GMT;
Set-Cookie:cat=tabby; Max-Age=86400
Nếu bạn không chỉ định thuộc tính Max-Age
hoặc Expires
, thì cookie sẽ bị xoá khi phiên hiện tại kết thúc. Loại cookie này đôi khi được gọi là cookie phiên.
Lâu đài
Nếu tiêu đề Set-Cookie
có thuộc tính Domain
, thì cookie sẽ được đưa vào các yêu cầu đối với miền được chỉ định và mọi miền phụ của miền đó.
Nếu tiêu đề Set-Cookie
không có thuộc tính Domain
, thì cookie sẽ không được đưa vào các yêu cầu đối với miền con.
Nói cách khác, việc thêm thuộc tính Domain
sẽ giảm các hạn chế về miền.
Ví dụ: với phản hồi từ trang web cats.example
:
Set-Cookie:cat=tabby
Cookie này sẽ chỉ được đưa vào các yêu cầu đếncats.example
Set-Cookie:cat=tabby; Domain=cats.example
Cookie sẽ được đưa vào các yêu cầu đếncats.example
, cũng như mọi yêu cầu về tài nguyên trên các miền phụ nhưfluffy.cats.example
hoặcuser.assets.cats.example
Đường dẫn
Nếu thuộc tính Path
có trong tiêu đề phản hồi Set-Cookie
, thì cookie được đặt sẽ chỉ có trong các yêu cầu đến URL (trên trang web đã đặt cookie!) khớp với giá trị Path
.
Ví dụ:
Set-Cookie:cat=tabby; Path=/articles
Cookie sẽ được đưa vào yêu cầu đối với mọi đường dẫn URL bắt đầu bằng/articles
:
✅https://cats.example/articles/tabby/index.html
✅https://cats.example/articles/breeds/tabby/index.html
❎https://cats.example/images/tabby.jpg
❎https://cats.example/en/articles/tabby/index.html
Set-Cookie:cat=tabby; Path=/
Tất cả yêu cầu đến bất kỳ URL nào trên trang web sẽ bao gồm cookie.
Nếu tiêu đề phản hồi Set-Cookie
không có giá trị Path
, thì cookie sẽ chỉ được đưa vào các yêu cầu đến cùng một thư mục. Ví dụ: giả sử cookie cat=tabby
được đặt để phản hồi một yêu cầu đối với cats.example/images/tabby.jpg.
Nếu không có Path
nào được đặt, thì cookie sẽ chỉ được đưa vào các yêu cầu đối với tệp trong thư mục cats.example/images
.
Bản minh hoạ
- 1pc.glitch.me: bản minh hoạ cookie của bên thứ nhất
- 3pc.glitch.me: bản minh hoạ cookie của bên thứ ba
Công cụ
- Xem, thêm, chỉnh sửa và xoá cookie trong Công cụ cho nhà phát triển của Chrome
- Công cụ phân tích Hộp cát về quyền riêng tư
Tìm hiểu thêm
- Công thức về cookie của bên thứ nhất
- Cookie là gì?
- Cookie của bên thứ ba là gì?
- Yêu cầu và phản hồi HTTP
- Công cụ cookie
- Bản minh hoạ về cookie
- Sử dụng cookie HTTP
- Cookie SameSite đã được giải thích
- OWASP: Cookie