Thuộc tính cookie

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.

Sơ đồ cho thấy rằng hai trang web khác nhau nhúng một bên thứ ba chung sẽ không còn chia sẻ cookie cho bên thứ ba đó nữa.
Với tính năng phân vùng cookie, một dịch vụ của bên thứ ba đặt cookie khi được nhúng vào một trang web cấp cao nhất sẽ không thể truy cập vào chính cookie đó khi dịch vụ được nhúng vào các trang web cấp cao nhất khác.

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 đến cats.example
  • Set-Cookie:cat=tabby; Domain=cats.example
    Cookie sẽ được đưa vào các yêu cầu đến cats.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ặc user.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ạ

Công cụ

Tìm hiểu thêm