Cookie là gì? Sử dụng cookie trong PHP

Đây là bài 42/53 bài của series môn học Lập trình Web PHP

Trong bài này, chúng ta sẽ tìm hiểu về cookie trong PHP. Để học tốt bài này, các bạn cần đọc lại bài Cài đặt môi trường lập trình Web PHP với XAMPP để biết cách chạy ứng dụng web PHP với XAMPP.

Cookie là một file nhỏ được server gửi đến và lưu trữ ở trình duyệt web (browser) trên máy tính của user. Khi có một request từ browser đến server, những cookie đã tồn tại trên browser cũng sẽ được gửi đến server.

Cookie in PHP

Cookie thường được sử dụng để theo dõi, lưu lại hoạt động truy cập của user trên một website. Ví dụ, nhớ tên đăng nhập của user vào website. Việc đầu tiên, server gửi các cookie cho browser để lưu username. Browser trên máy tính của user sẽ lưu lại cookie này. Lần sau, user sử dụng browser và truy cập đến website thì cookie sẽ được gửi ngược đến server. Sau đó, server sẽ nhận được sookie và xác định được thông tin username.

Trong PHP, một cookie được tạo ra bằng cách sử dụng hàm setcookie(). Cú pháp:

setcookie(
    string $name,
    string $value = "",
    int $expires_or_options = 0,
    string $path = "",
    string $domain = "",
    bool $secure = false,
    bool $httponly = false
): bool

Trong đó,

$name là tên của cookie.

$value là giá trị của cookie được lưu trữ ở browser trên máy tính của user.

$expires_or_options là thời gian mà cookie tồn tại (còn được lưu trữ) trên browser.

$path là đường dẫn trên server mà cookie có sẵn. Thường đặt là ‘/’ thì cookie sẽ có sẵn trong toàn bộ tên miền của websitee.

$domain là tên miền hoặc tên miền phụ mà cookie có sẵn.

$secure: nếu được đặt là true thì cookie sẽ chỉ được gửi đến client với giao thức https.

$httponly: nếu được đặt là true thì cookie sẽ chỉ được gửi đến client với giao thức http.

Hàm setcookie() sẽ trả về true nếu cookie được tạo thành công, ngược lại trả về false.

Lưu ý: Hàm setcookie() tạo ra một cookie được gửi trong phần header của giao thức http. Cookie phải được gửi trước khi các html được load. Do đó, hàm setcookie() phải được gọi trước thẻ <html>.

<?php
$cookie_name = "domainname";
$cookie_value = "gochocit.com";
// cookie exist in 30 days (86400s = 1 day)
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
?>
<html>
  <head>
    <title>Cookie in PHP</title>
  </head>
<body>
  <?php
  if(!isset($_COOKIE[$cookie_name])) {
    echo "Cookie named '" . $cookie_name . "' is not set!";
  } else {
    echo "<b>Cookie</b> '" . $cookie_name . "' is set!<br>";
    echo "<b>Value is</b>: " . $_COOKIE[$cookie_name];
  }
  ?>
</body>
</html>

Trong ví dụ trên, một cookie tên là ‘domainname’ được tạo và có giá trị là ‘gochocit.com’. Cookie này tồn tại 30 ngày trong browser ở máy tính của user. Các bạn có thể vào browser để xem các cookie được tạo ra.

Cookie trong browser

Để thay đổi giá trị của một cookie, chúng ta sử dụng lại hàm setcookie().

<?php
$cookie_name = "domainname";
$cookie_value = "en.gochocit.com";
// cookie exist in 30 days (86400s = 1 day)
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
?>
<html>
  <head>
    <title>Cookie in PHP</title>
  </head>
<body>
  <?php
  if(!isset($_COOKIE[$cookie_name])) {
    echo "Cookie named '" . $cookie_name . "' is not set!";
  } else {
    echo "<b>Cookie</b> '" . $cookie_name . "' is set!<br>";
    echo "<b>Value is</b>: " . $_COOKIE[$cookie_name];
  }
  ?>
</body>
</html>

Để xóa cookie, chúng ta sử dụng hàm setcookie() với thời gian tồn tại trong quá khứ (đã qua rồi).

<?php
// set the expiration date to one hour ago
setcookie("domainname", "", time() - 3600, "/");
?>
<html>
  <head>
    <title>Cookie in PHP</title>
  </head>
<body>
  <?php
    echo "Cookie 'domainname' is deleted.";
  ?>
</body>
</html>

Những cookie được tạo ra và đang tồn tại thì sẽ được lưu trữ trong biến mảng $_COOKIE. Dữ liệu của biến mảng $_COOKIE có dạng như ví dụ sau:

<?php
$cookie_name = "domainname";
$cookie_value = "gochocit.com";
// cookie exist in 30 days (86400s = 1 day)
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
$cookie_name_en = "domainname_en";
$cookie_value_en = "en.gochocit.com";
// cookie exist in 30 days (86400s = 1 day)
setcookie($cookie_name_en, $cookie_value_en, time() + (86400 * 30), "/");
?>
<html>
  <head>
    <title>Cookie in PHP</title>
  </head>
<body>
  <?php
    echo var_dump($_COOKIE);
  ?>
</body>
</html>
Kết quả (chạy file index.php 2 lần)
array(2) { 
["domainname_en"]=> string(15) "en.gochocit.com" 
["domainname"]=> string(12) "gochocit.com" 
}

Có nhiều trường hợp, cookie có thể bị tắt (disabled). Để kiểm tra cookie có được bật (enabled) và có thể tạo cookie hay không, chúng ta đếm số phần tử trong biến mảng $_COOKIE.

<?php
$cookie_name = "domainname";
$cookie_value = "gochocit.com";
// cookie exist in 30 days (86400s = 1 day)
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
?>
<html>
  <head>
    <title>Cookie in PHP</title>
  </head>
<body>
  <?php
    if(count($_COOKIE) > 0) {
      echo "Cookies are enabled.";
    } else {
      echo "Cookies are disabled.";
    }
  ?>
</body>
</html>

Khi muốn kiểm tra một cookie có tồn tại hay không thì chúng ta sử dụng biến $_COOKIE để truy xuất đến cookie đó.

<?php
$cookie_name = "domainname";
$cookie_value = "gochocit.com";
// cookie exist in 30 days (86400s = 1 day)
setcookie($cookie_name, $cookie_value, time() + (86400 * 30), "/");
?>
<html>
  <head>
    <title>Cookie in PHP</title>
  </head>
<body>
  <?php
    if(isset($_COOKIE["domainname"])) {
      echo "Cookie 'domainname' existed.";
    } else {
      echo "Cookie 'domainname' not existed.";
    }
  ?>
</body>
</html>

Trong ví dụ trên, hàm isset() giúp kiểm tra cookie có tên là “domainname” có tồn tại hay không? Các bạn có thể xem lại cách sử dụng hàm isset() ở bài Sử dụng hàm isset() trong PHP để kiểm tra một biến có tồn tại hay không?

5/5 - (1 bình chọn)
Bài trước và bài sau trong môn học<< Xử lý upload file với PHPSession là gì? Sử dụng session trong PHP >>
Chia sẻ trên mạng xã hội:

Trả lời

Lưu ý:

1) Vui lòng bình luận bằng tiếng Việt có dấu.

2) Khuyến khích sử dụng tên thật và địa chỉ email chính xác.

3) Mọi bình luận trái quy định sẽ bị xóa bỏ.