More often that not, we need to use information provided by a user in pages beyond the current page. Asking the user for the same information repetitively as user navigates from one page to another would would degrade the user-experience. For such cases, HTML uses cookies to hold small chunks of user-specific information using a key/value format. HTML stores these cookies at the client's machine, either in the memory or in the hard-disk.
In terms of requirement, user information can be either long-term (like storing user's information when creating a profile) or temporary (like items added in a shopping cart). Long-term information can be easily stored in a database or a file. But, storing temporary information in a database or a file may not be an efficient solution and using cookies is often a simpler solution.
PHP provides setcookie() function to enable PHP programs to set an HTML cookie. Here is the signature of the setcookie() function:
bool setcookie($name, $value, $expirationtime, $path, $domain, $issecure, $isforhttponly);
Description of Arguments:
$name: Name of the cookie.
$value: (optional) Value of the cookie; default is NULL.
$expirationtime: (optional) Time (in seconds) when the cookie will expire; default is 0.
$path: (optional) The cookie will be available for all pages that are in this path and
including the path. Default is the current directory of the page that calls setcookie().
$domain: (optional) Domain for which the cookie will be available.
$issecure: (optional) For https connections, we need to set it to 1. Default is 0.
$isforhttponly: (optional) If set to 1, then it would be available only via HTTP and not
via other languages like Javascript. Default is 0.
Let us further understand cookies using a simple example (provided below). Please note that we must enable cookies in the browser for cookies to work (which includes this example as well!). This example provides a simple login page; we call it "cookie_form_login.html".
<!doctype html> <html> <head> <h3>A Trivial Login Form </h3></head> <body> <form name="input_form" method="POST" action="cookie_login.php"><br> Username: <input type="text" name="textUsername"><br> Password: <input type="password" name="passwordPassword"><br> <input type="submit" name="submitButton" value="Login"><br><br><br> Feedback/Comments:<br> <textarea name="textareaComments"> We appreciate your comments. </textarea> </form> </body></html>
When the user fills the information and submits the form, the browser takes the user to the server-side action page: "cookie_login.php". This page (provided below) invokes setcookie() to create a cookie named "username". Since HTML sends cookies as part of HTTP's header, we must call setcookie() before the <html> tag and also, before printing any value on the HTML page.
To elaborate, this action page first creates a cookie, embeds it as part of the HTTP header, and then adds other information as part of HTTP data; after this, the HTTP server sends the page back to the client browser.
<?php
if (isset($_POST["textUsername"])) {
setcookie("username", $_POST["textUsername"], time()+3600);
}
?>
<!doctype html>
<html>
<?php
if ($_POST) {
$username = $_POST["textUsername"];
echo "Welcome, $username to this trivial page!!<br>";
echo "<br><a href=cookie_view.php> View your profile </a>";
} else {
/* Let us see if cookie is set for username */
var_dump($_COOKIE);
if (isset($_COOKIE["username"])) {
$username = $_COOKIE["username"];
echo "<br>Welcome, $username to this trivial page!!<br>";
echo "<br><a href=cookie_view.php> View your profile </a>";
} else {
echo "<br>You most certainly need to login!! <br>";
}
}
?>
</html>
The "cookie_login.php" page first verifies if the $_POST["textUsername"] field is set. If it is set, then this means that the user has reached this page after filling information from the "cookie_form_login.html" page and so we use setcookie() to create a "username" cookie. We also provide "time()+3600" as expiration time for this cookie, which means that the cookie would expire in 3600 seconds (or 1 hour) from now. For the sake of simplicity, we do not include the remaining (optional) arguments of setcookie() function.
Next, "cookie_login.php" again checks if the $_POST array is set; if it is set, then it extracts the $username from the $_POST array. Else, it checks if the cookie is set for the username and if so, then it extracts the $username from the $_COOKIE array; $_COOKIE is an alias for $HTTP_COOKIE_VARS array. The array $_POST can be NULL if the user reloads this page without being redirected from the "form_login.html" page and in that case, the logical thing would be to load the $username from a stored cookie, if one exists!
Here is the output of cookie_login.php page, if we login as "user1001" on the form_login.html page:

To demonstrate continuity of HTML cookies, "cookie_login.php" page also contains a link, "View your profile", to another page, "cookie_view.php", where the user can view profile information. Thus, overall the HTML flow includes three different files and their flow is shown below:
HTML Form Form Action File Page Link
------------------------ -------------------- ------------------
|"cookie_form_login.html"| -----> | "cookie_login.php" | -----> | "cookie_view.php"|
------------------------ -------------------- ------------------
Submit the Form. Click the
Form data is passed "View your profile"
as $_POST array.
Figure: HTML Flow when submitting a Form and viewing user-data using HTML Cookies.
If the user were to click the "View your profile" link, then "cookie_login.php" page would redirect the user to "cookie_view.php" page (provided below). This page simply checks if the cookie is set for "username" and if it is set, then it prints a message for the user. If the cookie is not set, then it prints that it could not find the profile. Thus, this example demonstrates that cookies can be used as a means of transferring temporary information from one page to another.
<!doctype html>
<html>
<?php
echo "Let us print _COOKIE <br>";
var_dump($_COOKIE);
if (isset($_COOKIE['username'])) {
$username = $_COOKIE['username'];
echo "<br>$username, here is the profile! <br>";
echo "Name: $username<br>";
} else {
echo "No profile found! <br>";
}
?>
</html>
If we were to click "View your profile" link, then the browser would display the following text:
Let us print _COOKIE
array(1) { ["username"]=> string(8) "user1001" }
user1001, here is the profile!
Name: user1001
Now, if we were to clear the cache in the browser and then reload the page ("cookie_view.php"), then the page would find that the cookie is not set. Here is the text displayed by the browser:
Let us print _COOKIE
array(0) { } No profile found!
However, in spite of their great value-add, HTML cookies suffer from one major drawback! Sometimes browsers disable cookies and in that case, we can not store temporary user-information on the client box. In such cases, it is important to have another mechanism (like PHP sessions) that can store user-specific mechanism.