Trình phân tích Set-Cookie

Set-Cookie Parser

Dán các tiêu đề phản hồi Set-Cookie nhiều dòng để kiểm tra các thuộc tính và phát hiện các kết hợp SameSite / Secure rủi ro.

Thẻ Thuộc tính Cookie

2 Set-Cookie
#1sessionabc123
path/
httponly(cờ)
secure(cờ)
samesiteLax
Không tìm thấy vấn đề thuộc tính rõ ràng nào
#2preview1
max-age600 (10m 0s)

setCookieParser.attr.maxAgeHint

samesiteNone
secure(cờ)
setCookieParser.warn.missingHttpOnlysetCookieParser.warn.missingPath

Xem trước JSON

[
  {
    "index": 0,
    "raw": "session=abc123; Path=/; HttpOnly; Secure; SameSite=Lax",
    "name": "session",
    "value": "abc123",
    "decodedValue": "abc123",
    "attributes": [
      {
        "key": "path",
        "value": "/"
      },
      {
        "key": "httponly",
        "value": null
      },
      {
        "key": "secure",
        "value": null
      },
      {
        "key": "samesite",
        "value": "Lax"
      }
    ],
    "attributeMap": {
      "path": "/",
      "httponly": true,
      "secure": true,
      "samesite": "Lax"
    },
    "warnings": []
  },
  {
    "index": 1,
    "raw": "preview=1; Max-Age=600; SameSite=None; Secure",
    "name": "preview",
    "value": "1",
    "decodedValue": "1",
    "attributes": [
      {
        "key": "max-age",
        "value": "600"
      },
      {
        "key": "samesite",
        "value": "None"
      },
      {
        "key": "secure",
        "value": null
      }
    ],
    "attributeMap": {
      "max-age": "600",
      "samesite": "None",
      "secure": true
    },
    "warnings": [
      "warn.missingHttpOnly",
      "warn.missingPath"
    ]
  }
]

Khi trình duyệt không nhận Cookie, thường không phải do giá trị sai mà do thuộc tính Set-Cookie sai.

Đề xuất Liên quan

Trình phân tích Set-Cookie là gì?

Trình phân tích Set-Cookie là công cụ gỡ lỗi chuyên biệt dành cho nội dung `Set-Cookie` trong tiêu đề phản hồi HTTP. Mục tiêu của nó không chỉ đơn giản là tách một dòng văn bản theo dấu chấm phẩy, mà là giúp nhà phát triển xác định: cấu hình cookie này từ máy chủ có đúng không, tại sao trình duyệt không nhận nó, tổ hợp thuộc tính nào có rủi ro bảo mật hoặc khả năng tương thích, và liệu Set-Cookie hiện tại có phù hợp cho các kịch bản trên nhiều trang, SSO, iframe, cookie bên thứ ba hoặc phiên làm việc hay không.

Khác với Cookie trong tiêu đề yêu cầu, Set-Cookie là "lệnh cấu hình" mà máy chủ gửi cho trình duyệt. Nó không chỉ chứa `name=value`, mà còn mang các thuộc tính như SameSite, Secure, HttpOnly, Path, Domain, Expires, Max-Age, Partitioned — các trường này trực tiếp quyết định việc trình duyệt có ghi cookie hay không, khi nào nó hết hạn, trên những đường dẫn và tên miền nào nó có hiệu lực, và liệu nó có thể gửi trong yêu cầu trên nhiều trang hay không. Do đó, nguyên nhân gốc rễ của nhiều vấn đề như "mất phiên đăng nhập", "trình duyệt không gửi cookie", "không hoạt động trong kịch bản xuyên miền" thực chất không nằm ở bản thân giá trị, mà ở cấu hình thuộc tính của Set-Cookie.

Giá trị của trang hiện tại nằm ở việc tách các thuộc tính này từ tiêu đề phản hồi gốc theo cấu trúc, sau đó thực hiện kiểm tra tĩnh kết hợp với quy tắc thực tế của trình duyệt. Ví dụ: SameSite=None có thiếu Secure hay không, Partitioned có đi kèm với Secure hay không, tiền tố __Host- có đặt Domain sai hay không, Max-Age có không hợp lệ hoặc bằng 0 hay không, Expires có thiếu Max-Age hay không. Các vấn đề này trình duyệt thường không hiển thị trực tiếp như lỗi cú pháp, mà từ chối một cách im lặng hoặc biểu hiện là "không hoạt động", do đó kiểm tra bằng công cụ là rất quan trọng.

Nếu bạn chỉ muốn biết những cookie nào hiện đang được gửi trong yêu cầu, đừng dừng lại ở trang này, hãy chuyển đến "Trình phân tích HTTP Cookie" phù hợp hơn để tách tiêu đề yêu cầu. Trang hiện tại phù hợp hơn với các kịch bản kiểm tra tiêu đề phản hồi như "tại sao trình duyệt không ghi", "cấu hình cookie này từ máy chủ có nguy cơ tiềm ẩn không", "liệu tổ hợp thuộc tính bảo mật và trên nhiều trang có hợp lý không".

Trường hợp sử dụng

  • Khi trình duyệt từ chối ghi cookie, nhanh chóng xác định đó là vấn đề cấu hình SameSite, Secure, HttpOnly hay Path/Domain
  • Trong kịch bản đăng nhập bên thứ ba, SSO, nhúng iframe hoặc yêu cầu trên nhiều trang, kiểm tra xem SameSite=None có được kết hợp chính xác với Secure hay không
  • Khi kiểm toán bảo mật, kiểm tra hàng loạt cookie trả về từ giao diện xem có thiếu HttpOnly, thiếu SameSite hoặc tồn tại tổ hợp thuộc tính rủi ro cao hay không
  • Xác minh rằng cookie tiền tố __Host-/__Secure- có thỏa mãn các ràng buộc mạnh của trình duyệt hay không, tránh bị loại bỏ một cách im lặng
  • Khi gỡ lỗi giải pháp phân vùng bên thứ ba Partitioned Cookie / CHIPS, xác nhận xem Partitioned và Secure có được khai báo đồng thời hay không
  • So sánh sự khác biệt của tiêu đề phản hồi Set-Cookie giữa môi trường phát triển, thử nghiệm và sản xuất để xử lý sự cố phiên đăng nhập bất thường sau khi chuyển môi trường

Cách Sử dụng

  1. Sao chép nội dung tiêu đề phản hồi Set-Cookie (hỗ trợ nhiều dòng) từ DevTools của trình duyệt, công cụ bắt gói tin hoặc nhật ký máy chủ
  2. Dán vào khu vực nhập, công cụ sẽ tự động loại bỏ tiền tố `Set-Cookie:` và phân tích từng dòng
  3. Xem tên, giá trị, giá trị giải mã URL, thẻ thuộc tính và nhãn cảnh báo của từng cookie
  4. Sao chép tiêu đề gốc hoặc xem trước JSON, tiếp tục gửi kết quả cho backend, dán vào Issue hoặc viết vào tập lệnh kiểm thử

Tính năng

  • Phân tích độc lập nhiều Set-Cookie: mỗi dòng trong một thẻ riêng, xem tên, giá trị gốc, giá trị giải mã URL và thuộc tính từng cái một
  • Tự động kiểm tra 14 vấn đề phổ biến: bao gồm các rủi ro thường gặp như SameSite, Secure, HttpOnly, Path, Domain, Max-Age, Expires, tiền tố __Host-/__Secure- và Partitioned
  • Phân tách thuộc tính đầy đủ: hiển thị có cấu trúc các trường SameSite, Secure, HttpOnly, Path, Domain, Expires, Max-Age, Partitioned
  • Chuyển đổi Max-Age dễ đọc cho con người: số giây tự động chuyển thành phút, giờ, ngày, giảm chi phí chuyển đổi thủ công
  • Nhập hàng loạt nhiều dòng: có thể dán trực tiếp toàn bộ khối tiêu đề phản hồi Set-Cookie đã sao chép từ DevTools hoặc công cụ bắt gói tin
  • Sao chép tiêu đề gốc và xem trước JSON: vừa thuận tiện để gửi lại cho backend, vừa thuận tiện để viết tài liệu, Issue, tập lệnh và ca kiểm thử
  • Không tải lên cục bộ: Session, Token và cookie trạng thái đăng nhập nhạy cảm được phân tích trong trình duyệt, không rời khỏi máy

Khi nào nên dùng Trình phân tích Set-Cookie, khi nào nên dùng hai trang còn lại?

Việc nhìn rõ "máy chủ đã đặt gì" và "thực tế đã gửi gì trong yêu cầu" là hai việc khác nhau, đừng nhầm lẫn khi kiểm tra.

Công cụĐầu vào phù hợpPhù hợp nhất choƯu điểm cốt lõi
Trình phân tích Set-Cookie (trang hiện tại)Tiêu đề phản hồi Set-CookieXử lý sự cố tại sao trình duyệt không nhận cookie, tại sao không hoạt động trên nhiều trang, tại sao cấu hình thuộc tính bảo mật có rủi roPhân tách thuộc tính đầy đủ và tự động kiểm tra 14 loại vấn đề cấu hình thường gặp
Trình phân tích HTTP CookieTiêu đề yêu cầu Cookie, document.cookieXác nhận những cookie nào thực sự được gửi trong yêu cầu, giá trị có được mã hóa URL hay không, có tên trùng lặp hay khôngTập trung hơn vào việc tách cặp tên-giá trị trong tiêu đề yêu cầu và đầu ra được chuẩn hóaMở Trình phân tích HTTP Cookie
Trình phân tích CookieKịch bản kiểm tra hỗn hợp chuỗi Cookie và Set-CookieKhi bạn chưa chắc chắn nguồn gốc dữ liệu trong tay, hoặc muốn chuyển đổi nhanh hai chế độ Cookie / Set-Cookie trên một trangGiống như cổng vào tổng thể để gỡ lỗi Cookie, đồng thời hỗ trợ xuất Netscape Cookie FileMở Trình phân tích Cookie

Best Practices

Đầu tiên xác định vấn đề nằm ở "đặt không thành công" hay "không gửi trong yêu cầu"

Nếu trình duyệt hoàn toàn không ghi cookie, hãy ưu tiên xem trang hiện tại; nếu trình duyệt đã ghi nhưng không gửi trong các yêu cầu sau đó, cần xem xét kết hợp với Trình phân tích HTTP Cookie. Set-Cookie và tiêu đề yêu cầu Cookie là hai giai đoạn khác nhau.

Trong kịch bản trên nhiều trang, trước hết hãy xem tổ hợp SameSite=None và Secure

Bẫy phổ biến nhất trong SSO, đăng nhập bên thứ ba, nhúng iframe và yêu cầu xuyên miền chính là SameSite=None nhưng không cấu hình Secure. Hãy xử lý sạch nhóm vấn đề này trước, sau đó mới xem xét logic máy chủ và chính sách trình duyệt.

Đừng chỉ nhìn vào tên với tiền tố __Host- / __Secure-, hãy kiểm tra tính đầy đủ của các ràng buộc

Nhiều nhóm nghĩ rằng việc thêm tiền tố `__Host-` hoặc `__Secure-` vào tên cookie đã làm cho nó an toàn hơn, nhưng nếu các điều kiện đi kèm như Secure, Path=/, Domain không được thỏa mãn, trình duyệt vẫn sẽ từ chối ghi.

Khi viết tài liệu và tái hiện Issue, ưu tiên giữ lại cả hai tài liệu: tiêu đề gốc và JSON

Tiêu đề gốc phù hợp để backend và vận hành kiểm tra giá trị trả về thực tế; JSON phù hợp để dán vào Issue, ca kiểm thử và tập lệnh để tiếp tục xử lý. Việc giữ lại cả hai cùng nhau sẽ thuận tiện hơn cho việc tái hiện và cộng tác so với chỉ chụp một ảnh màn hình từ DevTools.

Câu hỏi Thường gặp

Sự khác biệt giữa trình phân tích Set-Cookie và trình phân tích tiêu đề yêu cầu Cookie là gì?

Trình phân tích Set-Cookie dành cho tiêu đề phản hồi từ máy chủ, tập trung vào việc xem xét liệu "trình duyệt có chấp nhận cookie này không, có vấn đề với thuộc tính không"; trình phân tích Cookie dành cho yêu cầu do trình duyệt gửi đi, tập trung vào việc xem "yêu cầu này đã gửi những cookie nào". Nếu bạn đang xử lý sự cố cấu hình thuộc tính SameSite, HttpOnly, Secure, Path, Domain, Expires, Max-Age, hãy ưu tiên sử dụng trang hiện tại.

Trình phân tích HTTP Cookie

Tại sao trình duyệt đã nhận được phản hồi nhưng không ghi Cookie?

Đây chính là vấn đề mà công cụ hiện tại phù hợp nhất để giải quyết. Các nguyên nhân phổ biến bao gồm SameSite=None không được cấu hình Secure, cố gắng đặt Secure Cookie trên trang HTTP, vi phạm tiền tố __Host-, Partitioned thiếu Secure, cấu hình Path hoặc Domain không hợp lý, Max-Age không hợp lệ hoặc trực tiếp bằng 0, cũng như các hạn chế chính sách cookie bên thứ ba của trình duyệt.

Công cụ sẽ kiểm tra những rủi ro Set-Cookie phổ biến nào?

Trang hiện tại sẽ tự động phát hiện 14 loại vấn đề thường gặp, bao gồm SameSite=None thiếu Secure, giá trị SameSite không hợp lệ, Partitioned thiếu Secure, thiếu HttpOnly, thiếu Path, thiếu SameSite, tiền tố __Host- thiếu Secure, Path không phải là /, cấu hình sai Domain, tiền tố __Secure- thiếu Secure, Max-Age không hợp lệ, Max-Age=0, Domain bắt đầu bằng dấu chấm và Expires không có Max-Age.

Tại sao SameSite=None nhất thiết phải đi kèm với Secure?

Các trình duyệt hiện đại yêu cầu rằng nếu cookie có thể gửi trên nhiều trang khai báo `SameSite=None`, nó cũng phải có thuộc tính `Secure`, nếu không trình duyệt thường sẽ từ chối ghi trực tiếp. Loại vấn đề này rất phổ biến khi gỡ lỗi đăng nhập bên thứ ba, SSO, nhúng iframe và yêu cầu xuyên miền.

Tại sao trình duyệt từ chối các cookie có tiền tố __Host- và __Secure-?

`__Host-` và `__Secure-` là các tiền tố bảo mật có ràng buộc mạnh. `__Host-` yêu cầu phải có Secure, Path=/ và không được đặt Domain; `__Secure-` tối thiểu yêu cầu Secure. Nếu vi phạm các quy tắc này, trình duyệt sẽ trực tiếp bỏ qua cookie đó.

Nên xem xét Max-Age và Expires như thế nào?

Max-Age là số giây tương đối, thường có độ ưu tiên cao hơn Expires; Expires là thời điểm tuyệt đối, phụ thuộc vào đồng hồ của máy khách. Nhiều máy chủ chỉ viết Expires mà không viết Max-Age, mặc dù điều này hoạt động được, nhưng khi gỡ lỗi dễ gây ra đánh giá sai do chênh lệch múi giờ hoặc thời gian hệ thống.

Công cụ này có phù hợp để xử lý sự cố cookie trên nhiều trang và cookie bên thứ ba không?

Phù hợp. Dù là đăng nhập bên thứ ba, SSO, nhúng iframe, giao diện xuyên miền hay kịch bản CHIPS (Partitioned Cookie), công cụ này có thể giúp bạn nhanh chóng xem xét liệu tổ hợp SameSite, Secure và Partitioned có hợp lý hay không.

Kết quả phân tích có hỗ trợ sao chép hoặc xuất không?

Có hỗ trợ. Bạn có thể sao chép tiêu đề Set-Cookie gốc chỉ bằng một cú nhấp, cũng như xem trước JSON có cấu trúc để dán tên, giá trị, thuộc tính và kết quả cảnh báo của từng cookie vào Issue, tài liệu, tập lệnh kiểm thử hoặc bản ghi liên kết thử.

Session và Token tôi sao chép có được tải lên máy chủ không?

Không. Phân tích nội dung Set-Cookie, giải mã URL, tách thuộc tính và kiểm tra cảnh báo đều được thực hiện cục bộ trong trình duyệt, không tải tiêu đề phản hồi nhạy cảm lên máy chủ.

Thuật ngữ

Set-Cookie
Tiêu đề phản hồi HTTP, thông qua đó máy chủ bảo trình duyệt lưu trữ một cookie. Một phản hồi có thể xuất hiện nhiều Set-Cookie, mỗi cái thường tương ứng với một cookie.
SameSite
Thuộc tính kiểm soát việc có gửi cookie trong yêu cầu trên nhiều trang hay không. Các giá trị phổ biến là Strict, Lax, None; trong đó None thường yêu cầu đặt Secure cùng lúc.
HttpOnly
Khi được đặt, JavaScript phía trước không thể đọc cookie này thông qua document.cookie, chủ yếu được sử dụng để giảm rủi ro đánh cắp phiên làm việc qua XSS.
Secure
Khi được đặt, trình duyệt chỉ gửi cookie này trong kết nối HTTPS (hoặc trường hợp ngoại lệ localhost), tránh cookie nhạy cảm bị lộ trên HTTP không mã hóa.
Max-Age
Thời gian sống tương đối của cookie tính bằng giây. Thường có độ ưu tiên cao hơn Expires, khuyến nghị đặt rõ ràng trên máy chủ.
Expires
Thời điểm hết hạn tuyệt đối của cookie, phụ thuộc vào thời gian cục bộ của máy khách. Khi sử dụng riêng lẻ, chi phí gỡ lỗi thường cao hơn Max-Age.
Path
Giới hạn tiền tố đường dẫn URL mà cookie có hiệu lực. Khi Path không khớp, ngay cả khi cookie đã được ghi, nó cũng sẽ không được gửi trong các yêu cầu sau này.
Domain
Giới hạn phạm vi tên miền mà cookie có hiệu lực. Khi không đặt, thường chỉ giới hạn cho máy chủ hiện tại; khi đặt có thể tác động đến các miền con.
Partitioned (CHIPS)
Giải pháp lưu trữ phân vùng cho cookie bên thứ ba, thường được sử dụng như lộ trình thay thế sau khi các trình duyệt dần thắt chặt quy định về cookie bên thứ ba. Triển khai hiện tại thường yêu cầu đi kèm với Secure.
Tiền tố __Host- / __Secure-
Các tiền tố đặt tên cookie bảo mật cao được trình duyệt hỗ trợ, có các quy tắc ràng buộc mạnh. Khi vi phạm quy tắc, trình duyệt sẽ từ chối nhận cookie tương ứng.

Bảng tra cứu nhanh so sánh ba chiến lược SameSite

Khi kiểm tra cookie trên nhiều trang, trước hết hãy xem ranh giới hành vi của SameSite, sau đó kiểm tra xem có thiếu Secure hay không.

Giá trị SameSiteĐiều hướng cấp cao trên nhiều trang (GET)Tài nguyên phụ trên nhiều trang (img/iframe/script)Biểu mẫu POST trên nhiều trangXHR/fetch trên nhiều trangCó bắt buộc Secure không
StrictKhông gửiKhông gửiKhông gửiKhông gửiKhông
Lax (mặc định)GửiKhông gửiKhông gửiKhông gửiKhông
NoneGửiGửiGửiGửiPhải đặt Secure

Bảng đối chiếu các vấn đề thường gặp khi gỡ lỗi Set-Cookie

Khi trình duyệt từ chối cookie một cách im lặng, trước hết hãy kiểm tra theo các hướng dưới đây, thường nhanh hơn là nhìn chằm chằm vào phần thân phản hồi.

Triệu chứngNguyên nhân có xác suất caoƯu tiên kiểm tra
Trình duyệt hoàn toàn không ghi CookieSameSite=None thiếu Secure, vi phạm tiền tố hoặc tổ hợp thuộc tính không hợp lệTrước hết xem nhãn cảnh báo và thẻ thuộc tính trên trang hiện tại
Không hoạt động trong kịch bản trên nhiều trang / iframeSameSite quá nghiêm ngặt, thiếu Secure hoặc hạn chế chính sách bên thứ baTập trung vào SameSite, Secure, Partitioned
Cookie hết hiệu lực ngay sau khi ghiMax-Age=0, Max-Age không hợp lệ, vấn đề với thời gian ExpiresTrước hết xem Max-Age, sau đó xem Expires
__Host- / __Secure- Cookie không hoạt độngKhông thỏa mãn ràng buộc Secure, Path=/ hoặc DomainKiểm tra xem cảnh báo tiền tố có được kích hoạt hay không
Môi trường phát triển bình thường, môi trường sản xuất bất thườngSự khác biệt phản hồi ở tầng HTTPS, Domain, Path, SameSite hoặc proxySao chép tiêu đề gốc, so sánh phản hồi Set-Cookie ở các môi trường khác nhau

Privacy & Security

Phân tích tiêu đề phản hồi Set-Cookie, giải mã URL, tách thuộc tính và kiểm tra 14 loại cảnh báo đều được thực hiện hoàn toàn cục bộ trong trình duyệt. Session, Token và cookie phiên đăng nhập được dán vào sẽ không được tải lên bất kỳ máy chủ nào.