PHP and Cookies; a good mix! by Dennis
Pallett
Introduction Cookies have long been used in PHP scripts, and
are a very useful function. But what exactly are cookies? Maybe you have
used then, but you still don't know exactly what they are. Or you are
completely new to cookies? It doesn't matter, because in this tutorial I
will show you exactly what cookies are, and what they are used
for.
Cookies in a nutshell Cookies are small pieces of
information that is stored on the computer of your visitors. Each browser
handles it differently, but most simply store the information in a small
text file. Internet Explorer has a special folder, which can be found in
your C:Windows or C:WindowsSystem32 folder. You can delete all your
cookies, by going to the Options and 'Clearing Cookies' or deleting them
by hand. I don't recommend this though.
Almost every website uses
cookies. If you go to Amazon.com, you will get several cookies. The same
goes for CNN.com. Even Google uses cookies! They are extremely useful for
(temporarily) storing information. For example, if you have a login system
for your visitors, you could save their userid and password (very heavily
encrypted!) so they are automatically logged in the next time they visit
your website.
Or you could remember their last visit, and highlight
everything that is new. And that's just the beginning.
Using
Cookies Using cookies in PHP is extremely easy. In fact, there is
nothing to it, because of PHP's inbuilt setcookie() function. Have a look at
the documentation, and then try the following
example:
<?php
// Set a cookie // Cookie name:
name // Cookie value: Dennis Pallett // Cookie expire: in 24
hours
setcookie ('name', 'Dennis Pallett', time() +
(60*60*24)); ?>
If you run the code above, then a cookie will
be set. That's all. The cookie name and value are pretty obvious. The
cookie expire is when the cookie expires, or goes away. Simply use the time() function and add the number of
seconds you want to have the cookie available to it. In the example I
added 60*60*24=86400 seconds, or 24 hours.
If you have looked at
the documentation, you probably noticed there are additional arguments. As
the documentation says, the path is to limit a cookie to a specific path
on your web server. This is often used when you run multiple instances of
the same script in separate directories. You can safely omit this argument
when it doesn't matter if the cookie is available site-wide.
There
is also the domain argument. This can be used to limit the cookie to a
specific sub-domain, e.g. test.example.com. You can also safely ignore
this argument, or set it to .example.com (note the beginning period, this
is essential!).
Finally, there is also the secure argument. This
argument is only used for cookies that are sent over a secure HTTPS
connection (SSL). Just ignore this argument, unless you're working with a
secure connection.
One thing that should be mentioned is that
cookies must be set, before you display any HTML/text. It's probably best
if you turn on output buffering by putting ob_start() at the top of your
page.
Now that you have set a cookie, you probably want to retrieve
the value as well. After all, that is the whole point of using cookies.
Thankfully, as PHP is ever so easy, you can retrieve the same way as you
retrieve a GET value. See the following example to retrieve the value of
the previous example:
<?php echo 'Your name is ' .
$_COOKIE['name']; ?>
This should print "Your name is Dennis
Pallett". There's nothing more to it. It's just that easy!
Finally,
one thing you probably want to do as well is remove cookies. This is as
easy as setting them. Simply change the value of the cookie to FALSE, and
change the expire date to -3000 seconds. See the following
example:
<?php setcookie ('name', FALSE,
time()-1000); ?>
Checking if cookies are
enabled Before you start using cookies, you must make sure your
visitor has cookies enabled. This can be done with a simply PHP checking
script. Unfortunately, the PHP page needs to reload to check for cookies.
But this can be done very transparently, and your visitor should hardly
notice anything.
The following example will first set a test
cookie, then reload the page, and finally check whether cookies are
enabled.
<?php error_reporting (E_ALL ^ E_WARNING ^
E_NOTICE);
// Check if cookie has been set or not if
($_GET['set'] != 'yes') { // Set cookie setcookie ('test', 'test',
time() + 60);
// Reload page header ("Location:
checkcookies.php?set=yes"); } else { // Check if cookie exists if
(!empty($_COOKIE['test'])) { echo "Cookies are enabled on your
browser"; } else { echo "Cookies are <b>NOT</b> enabled
on your browser"; } } ?>
Run the code above, and see
what the output is. Check if cookies are enabled in your browser. If
they're not enabled, then you can enable them by going to your browser's
options. Unfortunately, this is different from each browser, so I can't
give you exact instructions. But Google can.
Storing
Arrays One feature of cookies that is often missed in articles is
the ability to story arrays. Cookies can be used to store
multi-dimensional arrays, which can be extremely useful to store
data.
Consider the following code;
<?php setcookie
("name[first]", "Dennis", time() + (60*60*24)); setcookie
("name[last]", "Pallett", time() + (60*60*24)); ?>
You can
then display these two cookies using the following
code:
<?php echo "First Name: " .
$_COOKIE['name']['first']; echo "<br />Last Name: " .
$_COOKIE['name']['last']; ?>
The cookie 'name' is an array,
and has multiple values. You can even go deeper and have multi-dimensional
arrays, e.g. $_COOKIE['name']['test']['something']['value']. You could
store whole arrays of data in cookies. But beware that you don't store too
much data, there are certain size limits to cookies.
In
Conclusion... Cookies are really versatile, and can be used for a
lot of different purposes. Many websites use cookies, and cookies can
really make your website more personalized. Using cookies in PHP isn't
hard at all, and you should be able to use them without any
difficulty.
Before actively using cookies in your website, you must
check whether the visitor has enabled them in their browser. If they don't
have cookies enabled, you must either redirect to a non-cookies version of
your website, or you can make sure your website also works without
cookies.
You can download a sample script at http://www.phpit.net/demo/php%20and%20cookies/logger.zip,
where cookies are used in a (somewhat) practical way. In this example,
there is a logging module, called log.php and a display module, called
history.php. Basically, you include the log.php in other PHP pages, and
then you can view history.php to lookup all the pages you have viewed and
how often. The example uses arrays, and stores them in cookies.
The
examples in this article can be downloaded at http://www.phpit.net/demo/php%20and%20cookies/examples.zip.
If
you have a really unique practical way of using cookies, please let me
know at dennis [AT] nocertainty [DOT] com. I'd really like to hear about
interesting ways of using cookies.
About the Author
Dennis Pallett is a young tech writer, with much experience in ASP, PHP
and other web technologies. He enjoys writing, and has written several
articles and tutorials. To find more of his work, look at his websites at
http://www.phpit.net/, http://www.aspit.net/ and http://www.ezfaqs.com/
|