Ba attribute kiểm soát mức lộ và cách gửi cookie: HttpOnly, Secure, SameSite.
- HttpOnly — JS không đọc được cookie qua
document.cookie— XSS không đánh cắp được session token; cookie vẫn tự động gửi kèm HTTP request. - Secure — cookie chỉ gửi qua HTTPS — bắt buộc trong production.
- SameSite —
Strict: không gửi trong mọi cross-site request;Lax(default Chrome từ 2020): chỉ gửi trong top-level GET navigation;None: gửi mọi cross-site request, bắt buộc kèmSecure— ngữ nghĩa chi tiết xem câu CSRF. - Best practice cho session cookie —
Set-Cookie: sessionId=abc; HttpOnly; Secure; SameSite=Lax; Path=/; Max-Age=3600. - Cookie prefix —
__Secure-(bắt buộc flag Secure);__Host-(Secure + không Domain +Path=/— mạnh nhất, ghim vào host). - Max-Age vs Expires — Max-Age (giây, tương đối) được ưu tiên vì không phụ thuộc clock của client; cookie không có cả hai là session cookie, xóa khi đóng browser.