Đây là bài mình trả lời về cookie trên 1 diễn đàn khác (nói tới session thì nên nói tới cookie ^^)
(Hì, mình thấy 2 bạn trình bày khá đầy đủ về cookie rồi. Mình bổ sung thêm 1 vài ý nhỏ:)
Cookie giúp các site nhận diện bạn là ai. Bởi bản chất của http là stateless nên sử dụng cookie giúp http trở thành stateful (thông qua 1 chuỗi nào đó, có thể là sessionID (sẽ được check trên server) hoặc như JWT (mã hoá luôn cả userid vào, và chỉ check phía client)
Có 1 số loại cookie sau:
1 Session cookie: cookie này sẽ xoá khi bạn thoát browser (trừ phi bạn sử dụng tính năng restore page when start browser, nó sẽ save vào sqlite). Loại này thì bạn cũng không cần phải logout luôn.
2 Persistent cookie: cookie này không xoá mà sẽ ở đó tới 1 time nào đó (TTL). Kể cả khi logout bạn cũng không xoá được, trừ phi bạn dùng tool mà xoá.
3 HttpOnly cookie: cookie này không đọc được bằng JS phía client mà phải đọc nhờ header khi trên server. Cookie này thì kể cả nhúng JS từ 3rd party đểu cũng không sợ.
4 Secure cookie: không truyền qua http, chỉ qua https. Cũng khá an toàn.
5 Samesite cookie:
6 3rdparty cookie:
7 Zombie cookie: thường do đã xoá nhưng dùng tính năng bật lại trang lần trước thì browser sẽ hồi sinh cookie này.
8 Super cookie: cookie bắt theo tên miền gốc, kiểu .com, hay .com.vn. Thường chẳng site nào enable cái này vì nếu enable thì site khác, kiểu 123.com có thể đọc được cookie của 456.com
Cookie sống theo:
1 Domain và path. Các domain chỉ truy cập cookie của mình, thậm chí subpath không thể truy cập rootpath, kiểu như cookie ở /hoho/ thì không thể đoc được ở /
2 Max age và expires: time qui định
Mình cũng chưa bao giờ phải xoá cookie khi ra khỏi trang cả, vì để lấy được cookie dài ngoằng vậy … tốn time phết. Nếu họ đã mượn được máy thì họ đọc luôn thông tin, nghịch ngợm luôn … chứ lấy cookie rồi lại phải build ở máy họ, vừa lâu, vừa chả chắc được ^^
Một số câu hỏi thảo luận thêm nhé:
1- Tại sao cookie sống dưới browser mà server vẫn đọc được? Tại sao server cũng có thể thay đổi được nội dung của cookie?
2- Nhược điểm của cookie và hiện nay mọi người thường thay thế bằng phương pháp nào? Tại sao các WebAPI đều không sử dụng cookie mà lại dùng token?
3- Có những cách nào để hack cookie? Concept và phương thức tấn công?