1. Cookie trong PHP là gì?

Cookie thường được sử dụng để xác định người dùng và lưu những tùy chọn riêng của từng user. Nó là một file nhỏ được máy chủ nhúng trên máy tính người dùng và PHP có thể truy xuất được tới nó. Mỗi khi cùng một máy tính yêu cầu một trang với một trình duyệt, nó cũng sẽ gửi cookie tới server. Bạn có thể truy xuất các giá trị cookie trong PHP. Cookie được lưu trữ ở máy của client lên khi đóng trình duyệt thì cookie vẫn tồn tại và tồn tại bao lâu là do bạn set. Ví dụ bạn thiết lập Cookie lưu trữ thông tin đăng nhập trong vòng 15 phút thì sau 15 phút mà bạn không có một thao tác thay đổi trên nó thì Cookie của bạn sẽ bị chết.

Cookie được lưu trữ theo cặp thông tin value/key. Nó được lưu ở trình duyệt người dùng và có thể xuất từ server khi người dùng truy cập trang. Thời gian sống của server được quy định tối đa là ba năm. Và cookie có tầm ảnh hưởng đến các vùng trên server do chúng ta quy định.

2. Thiết lập cookie

Ta sử dụng hàm setcookie() để tạo một cookie trong PHP.

Cú pháp:

setcookie($name, $value, $expire, $path, $domain);

Trong đó:

  • $name: là tên của Cookie
  • $value: giá trị của Cookie
  • $expire: thời gian sống của Cookie
  • $path : đường dẫn lưu trữ Cookie
  • $domain: tên của domain

Ở đây chỉ có tham số name là bắt buộc, còn lại thì tất cả thông số khác đều là tùy chọn.

Ví dụ: mình sẽ khởi tạo một cookie là Thành Nguyễn với thời gian sống là 10 phút

setcookie('user', 'VuThanhTai', time() + 600);

3. Lấy giá trị của cookie

Tất cả Cookie được lưu trữ trong biến toàn cục $_COOKIE nên để lấy giá trị Cookie ta dùng cú pháp sau: $bien = $_COOKIE[‘cookie_name’]. Ta nên kiểm tra có tồn tại Cookie không trước khi lấy nhé, nếu không sẽ bị thông báo lỗi nếu nó không tồn tại.

Ví dụ sau mình sẽ tạo một cookie có tên “user” với giá trị “Thành Nguyễn”. Cookie sẽ hết hạn sau 30 ngày (86400 * 30). “/” Có nghĩa là cookie có sẵn trong toàn bộ trang web (nếu không, hãy chọn thư mục bạn thích).

Sau đó, chúng ta truy xuất giá trị của cookie “user” (sử dụng biến toàn cục $ _COOKIE). Chúng ta cũng sẽ sử dụng hàm isset() để tìm hiểu xem cookie có được đặt hay không:

<!DOCTYPE html>
<?php
$cookie_name = "user";
$cookie_value = "Thành Nguyễn";
// 86400 = 1 day
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
?>
<html>
<body>
<?php
if(!isset($_COOKIE[$cookie_name])) {
     echo "Cookie có tên '" . $cookie_name . "' chưa được tạo!";
} else {
     echo "Cookie '" . $cookie_name . "' đã được tạo!<br>";
     echo "Giá trị là: " . $_COOKIE[$cookie_name];
}
?>
<p><strong>Chú ý:</strong> Có thể bạn phải tại lại trang web này 
để tạo cookie và đọc cookie.</p>
</body>

Lưu ý

  • setcookie() phải có trước thẻ <html>.
  • Giá trị của cookie được tự động mã hóa URL khi gửi cookie và tự động được giải mã khi nhận được (để ngăn chặn mã hóa URL, hãy sử dụng setrawcookie() thay thế).

4. Sửa đổi giá trị cookie trong PHP

Để sửa đổi cookie ta chỉ cần thiết lập một lần nữa cookie bằng cách sử dụng hàm setcookie() . Tức là một cách dễ hiểu nhất là ta gọi lại hàm setcookie() và truyền giá trị mới.

Ví dụ:

<!DOCTYPE html>
<?php
$cookie_name = "user";
$cookie_value = "Thành Nguyễn";
// 86400 = 1 day
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
?>
<html>
<body> 
<?php
if(!isset($_COOKIE[$cookie_name])) {
     echo "Cookie có tên '" . $cookie_name . "' chưa được tạo!";
} else {
     echo "Cookie '" . $cookie_name . "' đã được tạo!<br>";
     echo "Giá trị là: " . $_COOKIE[$cookie_name];
}
?>
</body>
</html>

5. Xóa cookie trong PHP

Để xóa cookie thì các bạn chỉ cần xét cho thời gian sống của nó nhỏ hơn thời điểm hiện tại. Tức là bạn thiết lập thời gian sống của nó sang quá trị âm nhiều hơn hoặc bằng giá trị sống lúc bạn thiết lập. Để xóa cookie, ta sử dụng hàm setcookie() với ngày hết hạn trong quá khứ.

Ví dụ:

<?php
    setcookie("user", "", time() - 3600);
?>
<html>
<body>
    <?php
        echo "Cookie 'user' đã được xóa.";
    ?>
</body>
</html>

Lưu ý

  • Khi thoát trình duyệt, cookies vẫn còn tồn tại miễn là chưa hết thời gian bạn đặt.
  • Khi Cookie được xóa thông tin của cookie được loại bỏ ra khỏi trình duyệt và biến hệ thống $_COOKIE

6. Kiểm tra kích hoạt cookie trong PHP

Ví dụ sau kiểm tra xem cookie có được bật hay không. Trước tiên, hãy thử tạo một cookie bằng hàm setcookie() trong PHP, sau đó đếm số phần tử của mảng $_COOKIE, nếu lớn hơn không thì có nghĩa là cookie đã được bật.

<?php
setcookie("test_cookie", "test", time() + 3600, '/');
?>
<html>
<body>
 
<?php
if(count($_COOKIE) > 0) {
    echo "Cookies đang được bật.";
} else {
    echo "Cookies đang bị tắt.";
}
?>
 
</body>
</html>

Kết quả là cookie đang được bật.