What is a Cookie?
A cookie is often used to identify a user. A cookie is a small file that the server embeds on the user's computer. Each time the same computer requests a page with a browser, it will send the cookie too. With PHP, you can both create and retrieve cookie values.
Create Cookies With PHP
A cookie is created with the setcookie() function.
Syntax
setcookie(name, value, expire, path, domain, secure, httponly);
Only the name parameter is required. All other parameters are optional.
PHP Create/Retrieve a Cookie
The following example creates a cookie named "user" with the value "John Doe". The cookie will expire after 30 days (86400 * 30). The "/" means that the cookie is available in entire website (otherwise, select the directory you prefer).
We then retrieve the value of the cookie "user" (using the global variable $_COOKIE). We also use the isset() function to find out if the cookie is set:
Example
<?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>
Run example »
Note: The setcookie() function must appear BEFORE the <html> tag.
Note: The value of the cookie is automatically URLencoded when sending the cookie, and automatically decoded when received (to prevent URLencoding, use setrawcookie() instead).
Modify a Cookie Value
To modify a cookie, just set (again) the cookie using the setcookie() function:
Example
<?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>
Run example »
Delete a Cookie
To delete a cookie, use the setcookie() function with an expiration date in the past:
Example
<?php
// set the expiration date to one hour
ago
setcookie("user", "", time() - 3600);
?>
<html>
<body>
<?php
echo "Cookie 'user' is deleted.";
?>
</body>
</html>
Run example »
Check if Cookies are Enabled
The following example creates a small script that checks whether cookies are enabled. First, try to create a test cookie with the setcookie() function, then count the $_COOKIE array variable:
Example
<?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>
Run example »
Complete PHP Network Reference
For a complete reference of Network functions, go to our complete PHP Network Reference.
PHP Exercises
Untuk mengakses cookies pada PHP, digunakan variabel superglobal $_COOKIE. Berbeda dengan session, cookie disimpan di sisi klien (client side), dan dapat dibaca dan diubah-ubah oleh user (yang mengerti javascript).
Menyimpan data ke dalam cookie pada PHP
Untuk menyimpan cookie pada PHP, gunakan perintah setcookie().
setcookie("nama_cookie", "isi_cookie", $intKapanExpire);nama_cookie dan isi_cookie harus berupa string. Cookie tidak dapat menerima value (isi) berupa array ataupun object.
$intKapanExpire adalah angka timestamp yang melambangkan waktu saat cookie tersebut akan expired. Misalkan bila membuat suatu cookie yang berlaku selama dua hari:
setcookie("kode_login", "abc123def456", time() + 3600 * 24 * 2);Di mana 3600 adalah jumlah detik dalam satu jam.
Jika perlu menyimpan array atau object, dapat menggunakan json_encode dan json_decode.
class CartItem{ public $item_id, $qty; public function __construct($arrKeyVal) { foreach ($arrKeyVal as $k=>$v) $this->$k = $v; } } $cart = []; $cart[] = new CartItem(["item_id"=>1, "qty"=>23]); $cart[] = new CartItem(["item_id"=>2, "qty"=>37]); setcookie("cart", json_encode($cart), time()+24*3600*5);Mengakses cookie pada PHP
Untuk mengakses cookie, pakai perintah
$suatuVar = $_COOKIE['nama_cookie'];Bila cookie disimpan dalam bentuk json, ambil dengan cara:
class CartItem{ public $item_id, $qty; public function __construct($arrKeyVal) { foreach ($arrKeyVal as $k=>$v) $this->$k = $v; } } $cart = json_decode($_COOKIE["cart"]); if ($cart != null) { foreach ($cart as $k=>$v) $cart[$k] = new CartItem ($v); } print_r($cart);Menghapus cookie pada PHP
Dan untuk menghapus cookie, gunakan:
setcookie("nama_cookie", "nilai kosong juga oke", time()-1);time()-1 adalah satu detik sebelum sekarang, sehingga cookienya akan langsung expired. Tidak harus -1, Anda bisa menggunakan -2, -10, -2000 dan sebagainya. Tetapi jangan memasukkan 0 ke dalam masa berlaku cookie, karena hasilnya pada browser Internet Explorer akan sulit ditebak.
Tips penting tentang cookie
Jangan pernah menyimpan password di dalam cookie, karena cookie dapat dengan mudah diakses melalui javascript.
Cookie juga dapat diubah dengan mudah melalui javascript. Misalkan Anda menyimpan userid di cookie dan bergantung dengan userid di cookie tersebut untuk login, maka sistem Anda akan dapat dengan mudah dibobol.
Untuk melihat isi cookie, masuk ke console browser (pada umumnya shortcutnya F12). Kemudian ketikkan document.cookie. Untuk mengubah nilai cookie lewat javascript, bisa dengan perintah misalnya: document.cookie += "; userid=1";
Anda mungkin tertarik untuk membaca membuat login remember me dengan PHP.