Cookies trong PHP

Cookies thường được dùng để nhận dạng, xác định user.


Vậy cookies là gì?

Cookie được dùng để xác định user. Về bản chất cookie là một file nhỏ mà server nhúng vào máy tính người dùng.

Mỗi khi cùng máy tính đó truy cập một trang bằng trình duyệt, nó cũng gửi cookie. Với PHP bạn có thể tạo và nhận các giá trị của cookie.


Tạo cookies với PHP

Cookie được tạo bởi hàm setcookie()

Cú pháp:

setcookie(tên, giá trị, ngày hết hạn, đường dẫn, tên miền, secure, httponly);

Chỉ tham số tên là bắt buộc, những cái còn lại là tùy chọn.


Nhận và tạo cookies với PHP

Ví dụ dưới đây tạo cookies với tên (cookie named) là user và giá trị tương ứng là “Đức Anh”. Cookies này sẽ hết hạn trong vòng 15 ngày (86400 * 15). Ký hiệu “/” nghĩa là cookies có giá trị trên toàn bộ website (nếu bạn không muốn thế, bạn có thể chọn thư mục hoặc bài viết cố định nào đó trong trang):

<?php
$cookie_name = "user";
$cookie_value = "Đức Anh";
setcookie($cookie_name, $cookie_value, time() + (86400 * 15), "/"); // 86400 giây tương đương 1 ngày
?>
<html>
<body>

<?php
if(!isset($_COOKIE[$cookie_name])) {
echo "Cookie named chưa được tạo!";
} else {
echo "Cookie '" . $cookie_name . "' đã được tạo!<br>";
echo "Giá trị của nó là: " . $_COOKIE[$cookie_name];
}
?>

</body>
</html>

Chú ý: Hàm setcookie() phải xuất hiện TRƯỚC thẻ <html>

Khi thử trên trình duyệt lần đầu đoạn code trên bạn sẽ không thấy hiện cookie name và value, bạn nhấn F5 để reload lại sẽ thấy. Hôm sau bật trình duyệt lên cũng vẫn thấy. Tuy nhiên sang đến ngày thứ 16 sẽ không thấy nữa vì quá hạn của cookies rồi nhé.


Thay đổi cookies

Để thay đổi cookies, bạn chỉ cần thiết lập lại các giá trị lần nữa, nó không khác quá trình khởi tạo tí nào cả:

<?php
$cookie_name = "user";
$cookie_value = "Đức Hùng";
setcookie($cookie_name, $cookie_value, time() + (86400 * 14), "/");
?>
<html>
<body>

<?php
if(!isset($_COOKIE[$cookie_name])) {
echo "Cookie named '" . $cookie_name . "' chưa được tạo!";
} else {
echo "Cookie '" . $cookie_name . "' đã được thiết lập!<br>";
echo "Giá trị của nó là: " . $_COOKIE[$cookie_name];
}
?>

</body>
</html>

Xóa cookie

Để xóa cookie, chúng ta sử dụng hàm setcookie() với ngày hết hạn là thời điểm nào đó trong quá khứ:

Ví dụ:

<?php
// Thiết lập ngày hết hạn là một giờ trước đó
setcookie("user", "", time() – 3600);
?>
<html>
<body>

<?php
echo "Cookie 'user' đã được xóa.";
?>

</body>
</html>

Kiểm tra xem Cookies có được cho phép hay không?

Một số trình duyệt cho phép người dùng ngăn không lưu cookies vì lý do riêng tư. Đoạn code nhỏ dưới đây giúp chúng ta kiểm tra xem cookies có được phép hay không, nó làm điều đó bằng cách tạo một cookies rồi sau đó đếm xem có bất kỳ cookie nào hay chưa?

Cơ mà cách này là xem cookies đã từng được phép tạo trên máy tính này hay không thì đúng hơn là xem tại thời điểm hiện tại có được phép tạo cookies.

Ví dụ:

<?php
setcookie("test_cookie", "test", time() + 3600, '/');
?>
<html>
<body>

<?php
if(count($_COOKIE) > 0) {
echo "Cookies được phép.";
} else {
echo "Cookies đã bị vô hiệu hóa.";
}
?>

</body>
</html>