Session là gì?
Session (phiên làm việc) là một khoảng thời gian tương tác giữa người dùng và website, trong đó server lưu lại thông tin tạm thời để duy trì trạng thái người dùng.
Ví dụ: khi bạn đăng nhập vào một trang web, session sẽ ghi nhớ rằng bạn là ai, đã đăng nhập hay chưa, vai trò là gì… Thông tin này được lưu trên server – còn client chỉ giữ một ID duy nhất để xác định phiên đó.
Session hoạt động như thế nào?
- Khi người dùng truy cập lần đầu, server tạo ra một Session ID
- Session ID này được gửi về trình duyệt qua cookie
- Trong mỗi lần request sau, trình duyệt gửi lại Session ID → server biết phiên nào đang được tiếp tục
- Tất cả dữ liệu của phiên (user_id, cart, v.v…) đều được lưu **ở phía server**
Session lưu gì?
- Trạng thái đăng nhập
- Giỏ hàng, thông tin tạm thời
- Dữ liệu phân quyền người dùng
- Token xác thực ngắn hạn
Session lưu ở đâu?
| Loại lưu trữ | Mô tả | Ví dụ |
|---|---|---|
| File (mặc định) | Lưu session vào ổ cứng server | /tmp/sess_abc123 |
| Database | Lưu vào bảng MySQL, PostgreSQL… | Bảng sessions |
| Redis / Memcached | Lưu trong bộ nhớ RAM → nhanh và phổ biến | Dùng trong các hệ thống lớn |
Session khác gì cookie?
| Tiêu chí | Session | Cookie |
|---|---|---|
| Lưu ở đâu? | Trên server | Trên trình duyệt |
| Độ bảo mật | Cao hơn (vì không lưu nội dung ở client) | Thấp hơn (dễ bị đọc nếu không có HttpOnly) |
| Dữ liệu lớn được không? | Được | Bị giới hạn (thường 4KB) |
| Bị xóa khi tắt trình duyệt? | Có (trừ khi dùng persistent session) | Tùy thời gian expire |
Session trong PHP hoạt động ra sao?
// Bắt đầu session
session_start();
// Gán giá trị
$_SESSION['user_id'] = 123;
// Lấy giá trị
echo $_SESSION['user_id'];
Session có thể bị hack không?
Có – nếu bị session hijacking (lấy trộm Session ID) hoặc CSRF. Vì vậy:
- Nên dùng
HttpOnlyvàSecurecho cookie lưu session ID - Hạn chế thời gian sống của session
- Regenerate session ID sau khi login
- Áp dụng SameSite để chống gửi cookie trái phép
Kết luận
Session là trái tim của mọi hệ thống web động – đặc biệt là nơi có tài khoản người dùng. Nó giúp giữ trạng thái giữa các lần truy cập, phân quyền, và bảo mật logic hoạt động. Dù là PHP, NodeJS hay Python – khái niệm session vẫn luôn tồn tại dưới nhiều hình thức.