Khi bạn vào một quán bún hay phở, thông thường bạn sẽ thấy trên tường hay mép bàn có ghi số. Sau khi bạn ăn xong, kêu tính tiền. Thường thì bạn sẽ nghe thấy câu quen thuộc: Khách bàn số 9 tính tiền. Và sau đó chủ quán sẽ nói: Dạ của anh hết tám chục. Họ không cần hỏi lại là bạn hay gia đình bạn đã ăn gì. Họ chỉ cần biết bạn ngồi bàn số 9.
Có một điều rất bình thường vì xảy ra hàng ngày, nhưng lại rất kỳ lạ.
Bạn mở Facebook.
Đã đăng nhập từ tuần trước.
Hôm nay mở lại.
Facebook vẫn biết:
"Đây là bạn."
Bạn vào Shopee.
Giỏ hàng vẫn còn.
Bạn vào Gmail.
Không cần nhập lại mật khẩu.
Bạn vào YouTube.
Video đang xem dở vẫn còn.
Website làm cách nào để nhớ được bạn?
Có phải máy tính của bạn đang bị "theo dõi"?
Hay website có trí nhớ siêu phàm?
Không. Có một "nhân vật" làm việc âm thầm phía sau.
Tên của nó là:
Cookie.
Cookie là gì?
Cookie là một đoạn dữ liệu nhỏ mà website lưu trên trình duyệt của người dùng để ghi nhớ thông tin giữa các lần truy cập.
Cookie thường được dùng để:
- Ghi nhớ đăng nhập
- Lưu ngôn ngữ
- Lưu giỏ hàng
- Ghi nhớ tùy chọn của người dùng
- Theo dõi phiên truy cập
Ví dụ thực tế
Bạn đến quán cà phê.
Nhân viên đưa bạn một chiếc thẻ nhỏ.
Trên thẻ ghi:
Bàn số 12
Bạn cầm thẻ.
Đi quanh quán.
Một lúc sau quay lại.
Đưa thẻ.
↓
Nhân viên biết ngay:
À.
Khách ngồi bàn 12.
Không cần hỏi lại từ đầu.
Cookie cũng hoạt động gần giống như vậy.
Nó giống như một chiếc thẻ nhỏ mà website đưa cho trình duyệt giữ hộ.
Cookie có lưu trên server không?
Không. Đây là điều rất nhiều người mới nhầm.
Cookie được lưu:
Trên trình duyệt của người dùng.
Ví dụ.
- Chrome.
- Firefox.
- Edge.
- Safari.
- ...
Mỗi trình duyệt sẽ giữ Cookie riêng.
Đó là lý do.
Bạn đăng nhập Facebook trên Chrome.
Nhưng mở Edge.
Lại phải đăng nhập lại.
Cookie giúp website nhớ điều gì?
Ví dụ.
Bạn vào một website bán hàng.
Chọn:
Giao diện tối.
↓
Lần sau quay lại.
Website sẽ vẫn hiện giao diện tối, rất phù hợp với sở thích của bạn.
Hoặc.
Bạn chọn:
🇻🇳 Tiếng Việt.
↓
Ngày mai mở lại.
Website vẫn dùng tiếng Việt.
Không phải website nhớ.
Mà là...
Cookie nhớ.
Ví dụ đăng nhập
Bạn đăng nhập thành công.
Website tạo Cookie.
Ví dụ:
user_id = 25
Hoặc:
login_token = abc123xyz
Lần sau.
Bạn mở website.
Trình duyệt tự gửi Cookie đó.
Website nhìn vào.
↓
Biết ngay:
À.
Đây là người đã đăng nhập.
Không cần nhập mật khẩu nữa.
Cookie có phải là mật khẩu không?
Không. Đây là hiểu lầm rất phổ biến.
Website không nên lưu:
- Tên đăng nhập
- Mật khẩu
vào Cookie.
Thay vào đó.
Thường chỉ lưu:
Một mã nhận dạng.
Ví dụ.
A8F5D2X9...
Website nhận mã đó.
↓
Đối chiếu với database.
↓
Biết người dùng là ai.
An toàn hơn rất nhiều.
Cookie có hết hạn không?
Có và cần lưu ý vấn đề này.
Ví dụ.
Website có thể tạo Cookie sống:
- 30 phút.
- 1 ngày.
- 7 ngày.
- 30 ngày.
Hoặc:
- 1 năm.
Khi hết hạn.
Cookie tự biến mất.
↓
Bạn phải đăng nhập lại.
Cookie và Session có giống nhau không?
Không giống nhau.
Nhưng chúng là "đồng đội".
Cookie:
Lưu trên trình duyệt.
Session:
Lưu trên server.
Thông thường.
Cookie chỉ giữ:
"Mã số."
Còn Session giữ:
Thông tin thật.
Đó là lý do bài tiếp theo chúng ta sẽ thảo luận:
Session vs Cookie.
Tập tành làm web
Hãy xét một trường hợp.
"Đã đăng nhập thành công. Nhưng cứ tắt trình duyệt là bị đăng xuất."
Sau khi kiểm tra. Chúng ta phát hiện.
Cookie được tạo.
Nhưng thời gian sống là: 0
Nghĩa là.
Chỉ cần đóng trình duyệt.
Cookie biến mất.
Đăng nhập cũng biến mất.
Không phải PHP lỗi.
Chỉ là Cookie hết hạn.
Một hiểu lầm phổ biến
Nhiều người nghĩ.
Cookie là virus.
Không đúng một chút nào.
Cookie chỉ là dữ liệu.
Bản thân Cookie không nguy hiểm.
Điều quan trọng là:
Website lưu gì trong Cookie.
Nếu lưu thông tin nhạy cảm không đúng cách.
Mới có vấn đề.
Vì sao nhiều website hỏi xin phép Cookie?
Có lẽ bạn từng thấy.
Vừa mở website.
Hiện ngay một thông báo.
"This website uses cookies..."
Đó là vì nhiều quốc gia có quy định về quyền riêng tư.
Website cần thông báo cho người dùng nếu sử dụng Cookie để ghi nhớ hoặc theo dõi hoạt động.
Xóa Cookie thì sao?
Ví dụ bạn xóa toàn bộ Cookie.
Điều gì xảy ra?
Rất nhiều website sẽ:
- Đăng xuất
- Quên ngôn ngữ
- Quên giao diện
- Quên giỏ hàng
Không phải tài khoản mất.
Chỉ là.
Website không còn "chiếc thẻ nhận diện" nữa.
Một mẹo "hết nước chấm"
Nếu website của bạn.
Đăng nhập lúc được.
Lúc không.
Hoặc.
Người dùng liên tục bị đăng xuất.
Hãy kiểm tra:
- Cookie có được tạo không?
- Cookie có hết hạn chưa?
- Trình duyệt có chặn Cookie không?
Đây là nguyên nhân rất phổ biến.
Debug kiểu dev "xịn sò"
1. Kiểm tra Cookie trên trình duyệt
Developer Tools giúp xem tất cả Cookie hiện có.
2. Đừng lưu mật khẩu trong Cookie
Hãy dùng Token.
3. Kiểm tra thời gian hết hạn
Nhiều lỗi chỉ vì Cookie hết hạn quá sớm.
4. Thử bằng chế độ Ẩn danh
Incognito thường không dùng lại Cookie cũ.
Rất hữu ích khi debug.
Checklist chuẩn không cần chỉnh
- Cookie lưu trên trình duyệt
- Cookie giúp ghi nhớ người dùng
- Không lưu mật khẩu vào Cookie
- Cookie có thời gian hết hạn
- Cookie và Session không giống nhau
- Cookie không phải virus
FAQ nhanh
Cookie có phải là Session không?
Không. Cookie lưu trên trình duyệt, Session thường lưu trên server.
Cookie có làm website nhanh hơn không?
Không trực tiếp. Nó giúp website ghi nhớ người dùng và giảm việc nhập lại thông tin.
Xóa Cookie có sao không?
Không. Bạn chỉ có thể phải đăng nhập lại hoặc thiết lập lại một số tùy chọn.
Có phải mọi website đều dùng Cookie?
Rất nhiều website hiện nay đều sử dụng Cookie dưới một hình thức nào đó.
Bạn có thể cũng đang gặp
White Screen of Death – Trang trắng xóa không báo lỗi
PHP login đúng password nhưng vẫn fail
isset() vs empty() khác nhau thế nào?
var_dump() là "vũ khí bí mật" của newbie
echo debug và nghệ thuật "soi từng bước"
Comment code đúng cách để khỏi tự giết mình