🍪 Tìm Hiểu Về Cookies Trong Phát Triển Web: Khách Hàng & Máy Chủ
Cookies là những đoạn dữ liệu nhỏ được lưu trữ trong trình duyệt của bạn, giúp các trang web nhớ bạn là ai, duy trì phiên làm việc và cá nhân hóa trải nghiệm của bạn. Nếu bạn đã từng đăng nhập vào một trang web và vẫn được đăng nhập vào ngày hôm sau, có khả năng—cookies đã làm điều đó.
Trong bài viết này, chúng ta sẽ khám phá cookies từ cả hai góc độ khách hàng (trình duyệt/JavaScript) và máy chủ (Node.js/Express, Java Spring Boot).
📌 Mục Lục
- Cookies là gì?
- Các loại Cookies
- Cookies phiên
- Cookies bền
- Cách thức hoạt động của Cookies
- Quản lý Cookies phía Khách Hàng
- Đọc cookies với JavaScript
- Viết cookies với JavaScript
- Hạn chế & HttpOnly
- Quản lý Cookies phía Máy Chủ
- Thiết lập cookies trong Node.js/Express
- Thiết lập cookies trong Java Spring Boot
- Thuộc tính Secure, HttpOnly và SameSite
- Thực hành bảo mật Cookies tốt nhất
- Tại sao các trang web yêu cầu quyền truy cập Cookies
- Kết luận
1. Cookies là gì?
Cookie là một cặp khóa-giá trị nhỏ được lưu trữ trong trình duyệt của người dùng.
Ví dụ định dạng:
sessionId=abc123; Path=/; Expires=Wed, 30 Aug 2025 12:00:00 GMT; Secure; HttpOnly
Cookies di chuyển qua lại giữa khách hàng và máy chủ thông qua tiêu đề HTTP, khiến chúng trở nên thiết yếu cho việc duy trì phiên làm việc, cá nhân hóa và phân tích.
2. Các loại Cookies
🍪 Cookies Phiên
- Chỉ được lưu trữ cho đến khi trình duyệt được đóng.
- Thường được sử dụng cho các phiên tạm thời như giỏ hàng.
🍪 Cookies Bền
- Được lưu trữ với một ngày hết hạn.
- Ví dụ: Phiên đăng nhập “Nhớ tôi”.
3. Cách thức hoạt động của Cookies
- Máy chủ → Trình duyệt: Máy chủ thiết lập cookies thông qua tiêu đề
Set-Cookie
. - Trình duyệt → Máy chủ: Trong mỗi yêu cầu tiếp theo, trình duyệt tự động đính kèm cookies vào tiêu đề
Cookie
. - JavaScript: Cũng có thể tạo, đọc hoặc sửa đổi cookies (trừ khi bị hạn chế bằng
HttpOnly
).
4. Quản lý Cookies phía Khách Hàng
✅ Đọc Cookies trong JavaScript
console.log(document.cookie);
// Ví dụ đầu ra: "theme=dark; sessionId=abc123"
✅ Viết Cookies trong JavaScript
// Thiết lập một cookie hết hạn sau 7 ngày
document.cookie = "user=Zeeshan; max-age=" + 7 * 24 * 60 * 60;
⚠️ Hạn chế
- JavaScript không thể đọc cookies HttpOnly, khiến chúng an toàn hơn.
5. Quản lý Cookies phía Máy Chủ
Trong khi JavaScript có thể quản lý cookies, máy chủ thường thiết lập cookies an toàn cho xác thực và phiên làm việc.
🍃 Ví dụ Node.js / Express
const express = require("express");
const app = express();
// Thiết lập cookie
app.get("/set-cookie", (req, res) => {
res.cookie("sessionId", "abc123", {
httpOnly: true, // Không thể truy cập qua JavaScript
secure: true, // Chỉ gửi qua HTTPS
maxAge: 24 * 60 * 60 * 1000 // 1 ngày
});
res.send("Cookie đã được thiết lập!");
});
// Đọc cookie
app.get("/get-cookie", (req, res) => {
console.log(req.cookies); // Cần middleware cookie-parser
res.send(req.cookies);
});
app.listen(3000, () => console.log("Máy chủ đang chạy trên http://localhost:3000"));
☕ Ví dụ Java Spring Boot
import org.springframework.http.ResponseCookie;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import jakarta.servlet.http.HttpServletResponse;
@RestController
public class CookieController {
@GetMapping("/set-cookie")
public String setCookie(HttpServletResponse response) {
ResponseCookie cookie = ResponseCookie.from("sessionId", "abc123")
.httpOnly(true)
.secure(true)
.path("/")
.maxAge(24 * 60 * 60) // 1 ngày
.build();
response.addHeader("Set-Cookie", cookie.toString());
return "Cookie đã được thiết lập!";
}
@GetMapping("/get-cookie")
public String getCookie(javax.servlet.http.HttpServletRequest request) {
if (request.getCookies() != null) {
return "Cookies: " + java.util.Arrays.toString(request.getCookies());
}
return "Không tìm thấy cookie nào.";
}
}
🔐 Thuộc tính Secure, HttpOnly, và SameSite
- Secure → Chỉ gửi qua HTTPS.
- HttpOnly → Ẩn khỏi JavaScript (
document.cookie
). - SameSite → Ngăn chặn tấn công giả mạo yêu cầu giữa các trang (CSRF).
6. Thực hành bảo mật Cookies tốt nhất
- Luôn thiết lập HttpOnly và Secure cho cookies xác thực.
- Sử dụng SameSite=Strict cho các ứng dụng nhạy cảm.
- Tránh lưu trữ dữ liệu nhạy cảm (như mật khẩu) trong cookies.
- Thay đổi và hết hạn cookies thường xuyên.
7. Tại sao các trang web yêu cầu quyền truy cập Cookies?
Do quy định về quyền riêng tư (GDPR, CCPA), các trang web phải yêu cầu sự đồng ý trước khi lưu trữ cookies theo dõi hành vi người dùng (đặc biệt là cookies quảng cáo).
8. Kết luận
Cookies là nền tảng của phiên làm việc, xác thực, và cá nhân hóa trên web.
- Ở phía khách hàng, JavaScript có thể đọc/viết cookies cho mục đích chung.
- Ở phía máy chủ, các framework như Express và Spring Boot thiết lập cookies an toàn cho xác thực và quản lý trạng thái.
Bằng cách kết hợp cả hai góc độ, các nhà phát triển có thể tạo ra các ứng dụng web an toàn và thân thiện với người dùng.
Câu Hỏi Thường Gặp (FAQ)
- Cookie có thể lưu trữ bao nhiêu dữ liệu?
- Mỗi cookie thường có giới hạn khoảng 4KB.
- Có cách nào để xóa cookie không?
- Có thể xóa cookie bằng cách thiết lập ngày hết hạn trong quá khứ.
- Cookies có an toàn không?
- Cookies có thể an toàn nếu được thiết lập với thuộc tính Secure và HttpOnly.
Thực Hành Tốt Nhất Khi Sử Dụng Cookies
- Kiểm tra thường xuyên việc lưu trữ và quản lý cookies của bạn.
- Đảm bảo rằng bạn đã thông báo cho người dùng về việc sử dụng cookies và lý do.
Tìm hiểu thêm:
Tham khảo tất cả các bài viết liên quan đến thiết kế hệ thống
Hastag: SystemDesignWithZeeshanAli