储存在用户本地终端上的数据
Cookie就是服务器暂存放在你计算机上的一笔资料,好让服务器用来辨认你的计算机。当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,Cookie 会帮你在网站上所打的文字或是一些选择,都记录下来。当下次你再光临同一个网站,Web服务器会先看看有没有它上次留下的Cookie资料,有的话,就会依据Cookie里的内容来判断使用者,送出特定的网页内容给你。
setcookie() 函数用于设置 cookie,setcookie() 函数必须位于 <html> 标签之前。
bool setcookie ( string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]] ) setcookie ("名称","值", "过期时间", "有效路径", "有效域名","安全设置","协议访问"); |
参数名 | 描述 |
---|---|
name | Cookie 名称。 |
value | Cookie 值。 这个值储存于用户的电脑里,请勿储存敏感信息。 比如 name 是 'cookiename', 可通过 $_COOKIE['cookiename'] 获取它的值。 |
expire | Cookie 的过期时间。 这是个 Unix 时间戳,即 Unix 纪元以来(格林威治时间 1970 年 1 月 1 日 00:00:00)的秒数。 也就是说,基本可以用 time() 函数的结果加上希望过期的秒数。 或者也可以用 mktime()。 time()+60*60*24*30 就是设置 Cookie 30 天后过期。 如果设置成零,或者忽略参数, Cookie 会在会话结束时过期(也就是关掉浏览器时)。 |
path | Cookie 有效的服务器路径。 设置成 '/' 时,Cookie 对整个域名 domain 有效。 如果设置成 '/foo/', Cookie 仅仅对 domain 中 /foo/ 目录及其子目录有效(比如 /foo/bar/)。 默认值是设置 Cookie 时的当前目录。 |
domain | Cookie 的有效域名/子域名。 设置成子域名(例如 'www.example.com'),会使 Cookie 对这个子域名和它的三级域名有效(例如 w2.www.example.com)。 要让 Cookie 对整个域名有效(包括它的全部子域名),只要设置成域名就可以了(这个例子里是 'example.com')。 |
secure | 设置这个 Cookie 是否仅仅通过安全的 HTTPS 连接传给客户端。 设置成 TRUE 时,只有安全连接存在时才会设置 Cookie。 如果是在服务器端处理这个需求,程序员需要仅仅在安全连接上发送此类 Cookie (通过 $_SERVER["HTTPS"] 判断)。 |
httponly | 设置成 TRUE,Cookie 仅可通过 HTTP 协议访问。 这意思就是 Cookie 无法通过类似 JavaScript 这样的脚本语言访问。 要有效减少 XSS 攻击时的身份窃取行为,可建议用此设置(虽然不是所有浏览器都支持),不过这个说法经常有争议。 PHP 5.2.0 中添加。 TRUE 或 FALSE |
现在使用三个文件好讲解cookie的用法分别是setcookie.php、echo.php、delete.php
<?php $expire=time()+60*60*24*30*12; setcookie("xudaima", "炫代码", time()+3600);//3600秒等于一小时,过期时间1小时 setcookie("user", "zhansan", $expire);//过期时间一年(60 秒 * 60 分 * 24 小时 * 30 天* 12 月) ?>
先运行一下setcookie.php文件,页面是空白的,但是cookie保存下来了。
<?php print_r($_COOKIE);//打印全部cookie echo $_COOKIE["xudaima"]; //打印单个xudaima的cookie ?>
结果:
Array ( [xudaima] => 炫代码 [user] => zhansan ) 炫代码 |
然后直接运行echo.php文件,就会有值打印出来了,在cookie没有过期或者删除的情况下cookie会一直存在
<?php setcookie("user", "zhansan", time()-3600);//过去时间一小时 ?>
只要把过期时间设置为过去的时间(以前的时间),则是删除cookie,我们运行delete.php后再去运行echo.php
结果:
Array ( [xudaima] => 炫代码 ) 炫代码 |
各浏览器对Cookie有一定的限制,在使用时需要格外注意。应该尽量保证cookie个数小于20个,总大小 小于4KB。
IE6.0 | IE7.0/8.0/9.0+ | Opera | FF | Safari | Chrome | |
---|---|---|---|---|---|---|
cookie个数 | 每个域为20个 | 每个域为50个 | 每个域为30个 | 每个域为50个 | 没有个数限制 | 每个域为53个 |
cookie大小 | 4095个字节 | 4095个字节 | 4096个字节 | 4097个字节 | 4097个字节 | 4097个字节 |