Home >Backend Development >PHP Tutorial >Cookies in PHP_PHP Tutorial
用PHP来设置并读取cookie是一件极其——我们敢说吗?——简单的事情。我们并不希望大力鼓吹cookie,不过它们的确既重要又实用。它们是解决某些问题时唯一适用的工具。
要创建并修改一个 cookie,可使用PHP函数setcookie()。取决于想对cookie进行控制的程度,及谁可以读取cookie的值,setcookie()最多可有六个参数。
设置cookie最简单的方式如下:
setcookie('name', 'bret');
?>
然后,在用户退出前,接下来使用此浏览器查看的站点中每一个页面,都会有一个值为“bret”的变量$name,并且很容易通过PHP 对其进行访问。由于其生存期是一次用户连结,此类cookie被称为session cookie。
如果希望用户关闭其浏览器后,仍保留此cookie,则必须传递第三个参数给setcookie()函数,即设定此cookie的有效日期。由于PHP的背景完全源于Unix的思想,这个有效期限需要以从1970年1月1日起算的总秒数来代表。如果作为Unix程序员,这种算法对你而言可能是合情合理的。但如果来自Windows或Macintosh阵营,你可能只能摇头叹息,无法理解那些古怪的Unix家伙们。
不过无需害怕。PHP提供一个很好用的函数mktime()。你只要按顺序传送给mktime()你希望表示的小时,分钟,秒数,月份,日期,及年份,mktime()就会返回该日期自1970年1月1日的总秒数。因此,如果需要模拟 Y2K 问题:
$y2k = mktime(0,0,0,1,1,2000);
setcookie('name', 'bret', $y2k);
?>
现在,你的cookie将会在2000年失效。
如果需要更新cookie以让其储存新值,只需要将其原值覆盖即可。因此,即使你已经在之前的页面中刚刚发送cookie,仍可以将你的名字改为“jeff”。
$y2k = mktime(0,0,0,1,1,2000);
setcookie('name', 'jeff', $y2k);
?>
注意这样做并不会改变变量$name的值。在页面载入的时候,其值就已经确定。如果希望总是同时确定二者,可以编写如下代码:
$name = 'jeff';
$y2k = mktime(0,0 ,0,1,1,2000);
setcookie('name', $name, $y2k);
? >
The next two parameters of setcookie() can control the domain and directory path of the program that reads cookies. The default setting is that only pages in the same directory structure as the server that sent the cookie and at the same level or below can read its value. This is due to network security considerations. However, if you have an account with "www.domain.com" but also "other.domain.com", and the account allows processing pages from the ~/myhome directory, you should change setcookie() as follows:
setcookie('name', 'jeff', $y2k, '~/myhome', '.domain.com ');
?>
The last parameter of setcookie() that we have not used yet is to set the cookie to only be sent to web servers that implement secure connections such as SSL. To use this feature, set the sixth value to 1.
Deleting cookies is very simple, just pass the cookie name to setcookie() and PHP will delete it.
setcookie('name');
?>
Finally, there is an important thing to note about the use of cookies. Because of the way cookies work with HTTP, you must send all cookies before you output any text. Otherwise PHP will give a warning and the cookie will not be sent. So this is the right way to do it:
setcookie('name', 'jeff');
echo "Hello Everyone!";
?>
The following is the error:
$today = mktime(12,0,0,6,25,1999);
echo 'Here it is '.date('g:i:s a, F d, Y',$today);
echo '';
echo 'In GMT it is '.gmdate('g:i:s a, F d, Y', $today);
?>