PHP – Cookies

Cookie thường được sử dụng để xác định user.

Cookie là gì?

Cookie thường được dụng đẻ xác định user. Cookie là 1 file nhỏ mà server nhúng vào máy tính của người dùng. Mỗi khi máy tính người dùng gửi request đến 1 trang qua trình duyệt nó sẽ gửi kèm theo cookie. Với PHP bạn có thể tạo và nhận giá trị cookie.

Tạo cookie

Cấu trúc

setcookie(name, value, expire, path, domain, secure, httponly);

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

Tạo/Nhận cookie

Ví dụ sau tạo cooke có name “user”, value “John Doe”. Cookie hết hạn sau 30 ngày (86400 * 30). Dấu “/” có nghĩa là cookie sẽ có giá trị trong toàn bộ trang web (nếu không, hãy chọn thư mục bạn thích).

Sau đó, chúng tôi lấy giá trị của cookie “user” (sử dụng biến global $_COOKIE). Chúng tôi cũng sử dụng hàm isset() để tìm kiểm tra cookie tồn tại chưa.

<?php
$cookie_name = "user";
$cookie_value = "John Doe";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/"); // 86400 = 1 day
?>
<html>
<body>

<?php
if(!isset($_COOKIE[$cookie_name])) {
    echo "Cookie named '" . $cookie_name . "' is not set!";
} else {
    echo "Cookie '" . $cookie_name . "' is set!<br>";
    echo "Value is: " . $_COOKIE[$cookie_name];
}
?>

</body>
</html>

Hàm setcookie() phải nằm trước thẻ <html>

Lưu ý: Giá trị của cookie được tự động URLencoded khi gửi đi và tự động decoded khi nhận (để không URLencoding, có thể sử dụng setrawcookie() để thay thế).

Sửa giá trị Cookie

Để sửa đổi một cookie, chỉ cần set lại cookie bằng cách sử dụng hàm setcookie():

<?php
$cookie_name = "user";
$cookie_value = "Alex Porter";
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
?>
<html>
<body>

<?php
if(!isset($_COOKIE[$cookie_name])) {
    echo "Cookie named '" . $cookie_name . "' is not set!";
} else {
    echo "Cookie '" . $cookie_name . "' is set!<br>";
    echo "Value is: " . $_COOKIE[$cookie_name];
}
?>

</body>
</html>

Xóa cookie

Để xóa cookie, dùng hàm setcookie() với thời gian hết hạn là thời gian đã qua.

<?php
// set the expiration date to one hour ago
setcookie("user", "", time() - 3600);
?>
<html>
<body>

<?php
echo "Cookie 'user' is deleted.";
?>

</body>
</html>

Kiểm tra Cookies có được bật hay không

Ví dụ sau kiểm tra xem cookie có được bật hay không. Trước tiên, tạo một cookie thử nghiệm với hàm setcookie(), sau đó kiểm tra mảng $_COOKIE có phần tử không

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

<?php
if(count($_COOKIE) > 0) {
    echo "Cookies are enabled.";
} else {
    echo "Cookies are disabled.";
}
?>

</body>
</html>