1. Cookies trong PHP là gì?
Cookies là một phần nhỏ dữ liệu được lưu trữ trên máy tính của người dùng dưới dạng các tệp văn bản thông qua trình duyệt. Mục đích của cookies là lưu trữ các thông tin liên quan đến người dùng (như phiên đăng nhập, ngôn ngữ ưu tiên, sản phẩm trong giỏ hàng, v.v.) và giúp trang web ghi nhớ thông tin khi người dùng quay lại.
Trong PHP, bạn có thể tạo, truy cập và xóa cookies bằng cách sử dụng các hàm tích hợp sẵn.
Cookies có thể lưu trữ thông tin gì?
Cookies thường được sử dụng để lưu trữ:
- ID phiên đăng nhập.
- Tùy chọn ngôn ngữ của người dùng.
- Các sản phẩm trong giỏ hàng khi mua sắm trực tuyến.
- Trạng thái đăng nhập của người dùng (nhớ mật khẩu).
2. Cách tạo cookies trong PHP
Cookies được tạo bằng cách sử dụng hàm setcookie() của PHP. Cookie sẽ được gửi đến trình duyệt của người dùng và sẽ được lưu trữ ở đó cho đến khi nó hết hạn hoặc bị xóa.
Cú pháp của setcookie():
setcookie(name, value, expire, path, domain, secure, httponly);Trong đó:
- name: Tên của cookie (bắt buộc).
- value: Giá trị của cookie (bắt buộc).
- expire: Thời điểm hết hạn của cookie (tính bằng giây kể từ 1970-01-01 00:00:00 GMT). Nếu không đặt thời gian hết hạn, cookie sẽ chỉ tồn tại trong phiên làm việc (session) của người dùng.
- path: Đường dẫn trên máy chủ mà cookie có hiệu lực (tùy chọn).
- domain: Tên miền mà cookie có hiệu lực (tùy chọn).
- secure: Chỉ gửi cookie qua kết nối HTTPS nếu được đặt là
true(tùy chọn). - httponly: Ngăn không cho truy cập cookie qua JavaScript nếu được đặt là
true(tùy chọn, giúp tăng cường bảo mật).
Ví dụ 1: Tạo cookie đơn giản
// Tạo cookie tên là "username" và giá trị là "JohnDoe", có thời gian sống là 1 giờ
setcookie("username", "JohnDoe", time() + 3600);
// Hiển thị thông báo sau khi tạo cookie
echo "Cookie 'username' đã được thiết lập.";Giải thích:
setcookie("username", "JohnDoe", time() + 3600): Tạo một cookie với tênusername, giá trị làJohnDoe, và thời gian sống là 1 giờ (3600 giây).- Cookie sẽ tồn tại trên trình duyệt của người dùng và được gửi lại mỗi khi người dùng truy cập vào trang.
Ví dụ 2: Tạo cookie với các tùy chọn nâng cao
// Tạo cookie với đường dẫn và tên miền cụ thể
setcookie("user_email", "johndoe@example.com", time() + 86400, "/", ".example.com", true, true);
// Hiển thị thông báo sau khi tạo cookie
echo "Cookie 'user_email' đã được thiết lập với tùy chọn nâng cao.";Giải thích:
- Cookie
user_emailsẽ có hiệu lực trên toàn bộ trang web (khi sử dụng/cho đường dẫn) và chỉ gửi qua kết nối HTTPS nhờ cờsecuređặt làtrue. httponlyđặt làtruengăn không cho cookie này bị truy cập bởi JavaScript, tăng cường bảo mật cho cookie.
3. Truy cập và đọc cookies trong PHP
Sau khi cookie được tạo, bạn có thể truy cập nó trong PHP bằng cách sử dụng biến toàn cục $_COOKIE. PHP lưu trữ tất cả các cookie trong mảng này, và bạn có thể dễ dàng truy xuất dữ liệu từ đó.
Ví dụ 3: Truy cập giá trị của cookie
if (isset($_COOKIE['username'])) {
echo "Cookie 'username' có giá trị là: " . $_COOKIE['username'];
} else {
echo "Cookie 'username' chưa được thiết lập.";
}Giải thích:
isset($_COOKIE['username']): Kiểm tra xem cookie có tênusernameđã tồn tại chưa.- Nếu tồn tại, hiển thị giá trị của cookie thông qua
$_COOKIE['username'].
4. Cập nhật và sửa đổi cookie
Để cập nhật giá trị hoặc thời gian sống của cookie, bạn chỉ cần gọi lại hàm setcookie() với cùng tên cookie và giá trị mới. Cookie sẽ được cập nhật trên trình duyệt của người dùng.
Ví dụ 4: Cập nhật giá trị cookie
// Cập nhật giá trị của cookie 'username' và kéo dài thời gian sống thêm 1 giờ
setcookie("username", "JaneDoe", time() + 3600);
// Hiển thị thông báo sau khi cập nhật cookie
echo "Cookie 'username' đã được cập nhật với giá trị mới.";Giải thích:
- Ở đây, chúng ta đã cập nhật giá trị của cookie
usernamethành"JaneDoe"và gia hạn thời gian sống thêm 1 giờ nữa.
5. Xóa cookies
Để xóa một cookie, bạn có thể đặt thời gian hết hạn của nó về một thời điểm trong quá khứ bằng cách sử dụng hàm setcookie(). Cookie sẽ bị xóa khi trình duyệt nhận biết rằng nó đã hết hạn.
Ví dụ 5: Xóa cookie
// Xóa cookie 'username' bằng cách đặt thời gian hết hạn trong quá khứ
setcookie("username", "", time() - 3600);
// Hiển thị thông báo sau khi xóa cookie
echo "Cookie 'username' đã bị xóa.";Giải thích:
setcookie("username", "", time() - 3600): Đặt thời gian hết hạn của cookieusernamevề trước thời điểm hiện tại 1 giờ, do đó cookie sẽ bị xóa.
6. Lưu ý khi sử dụng cookies
6.1. Cookies và bảo mật
- Cookies có thể bị đánh cắp: Nếu không được bảo vệ đúng cách, cookies có thể bị đánh cắp qua các cuộc tấn công XSS (Cross-Site Scripting). Sử dụng cờ
HttpOnlyđể ngăn không cho truy cập cookie từ JavaScript. - Sử dụng cờ
Secure: Để bảo vệ cookie trên các kết nối HTTPS, hãy sử dụng cờsecurekhi tạo cookie. Điều này đảm bảo cookie chỉ được truyền qua các kết nối an toàn. - Giới hạn kích thước: Một cookie có kích thước tối đa là khoảng 4KB. Do đó, cookies không thích hợp để lưu trữ dữ liệu lớn, thay vào đó bạn nên lưu trữ trong cơ sở dữ liệu.
6.2. Quy tắc sử dụng cookie
- Cookies chỉ có thể được thiết lập trước khi bất kỳ dữ liệu nào được gửi đến trình duyệt. Điều này có nghĩa là lệnh
setcookie()phải được gọi trước khi bất kỳ mã HTML nào được in ra, kể cả thẻ<!DOCTYPE>hoặc thẻ mở<html>. Nếu không, bạn sẽ gặp lỗi "Headers already sent".
Ví dụ 6: Tránh lỗi khi thiết lập cookie
<?php
// Thiết lập cookie trước khi gửi bất kỳ mã HTML nào
setcookie("username", "JohnDoe", time() + 3600);
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Cookies trong PHP</title>
</head>
<body>
<p>Cookie đã được thiết lập!</p>
</body>
</html>Nếu bạn cố gắng đặt cookie sau khi đã in bất kỳ nội dung HTML nào, PHP sẽ gặp lỗi và cookie sẽ không được gửi đi.
7. Thực hành: Quản lý đăng nhập với Cookies
Ví dụ 7: Tạo hệ thống "Nhớ mật khẩu" với cookie
Giả sử bạn có một form đăng nhập và muốn sử dụng cookie để ghi nhớ thông tin đăng nhập của người dùng.
Mã HTML cho form đăng nhập:
<form method="post" action="login.php">
<label for="username">Tên đăng nhập:</label>
<input type="text" name="username" id="username" required>
<label for="password">Mật khẩu:</label>
<input type="password" name="password" id="password" required>
<label>
<input type="checkbox" name="remember" id="remember"> Nhớ mật khẩu
</label>
<button type="submit">Đăng nhập</button>
</form>Mã PHP trong login.php:
<?php
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$username = $_POST['username'];
$password = $_POST['password'];
// Giả sử đăng nhập thành công sau khi kiểm tra thông tin đăng nhập
if ($username == 'admin' && $password == 'password123') {
// Nếu người dùng chọn "Nhớ mật khẩu"
if (isset($_POST['remember'])) {
setcookie("username", $username, time() + (86400 * 30), "/"); // Cookie tồn tại trong 30 ngày
}
echo "Đăng nhập thành công! Chào mừng, " . $username;
} else {
echo "Tên đăng nhập hoặc mật khẩu không đúng.";
}
}
?>Giải thích:
- Nếu người dùng chọn checkbox "Nhớ mật khẩu", cookie sẽ được tạo để lưu trữ tên đăng nhập của họ trong 30 ngày.
- Khi người dùng truy cập lại trang, bạn có thể kiểm tra cookie
usernameđể tự động điền thông tin đăng nhập.
8. Kết luận
Cookies là một công cụ hữu ích trong PHP để lưu trữ dữ liệu tạm thời trên trình duyệt của người dùng, giúp tăng cường trải nghiệm và tương tác của trang web. Tuy nhiên, bạn cần quản lý và bảo mật cookies cẩn thận để tránh các vấn đề bảo mật.
Tóm tắt:
- Sử dụng
setcookie()để tạo và cập nhật cookies. - Truy cập cookies qua biến toàn cục
$_COOKIE. - Sử dụng cờ
HttpOnlyvàSecuređể bảo mật cookies. - Cookies có thể được sử dụng để lưu trữ thông tin đăng nhập, tùy chọn ngôn ngữ, và nhiều tính năng khác.
Chúc bạn học tập hiệu quả trên CodeTutHub!









