Cookie 的使用很普遍,许多提供个性化服务的网站,都利用 Cookie 来辨认使用者,以便于送出给使用者量身定做的内容,比如网站的登陆、购物车等,有效地使用 Cookie 可以轻松完成很多复杂的任务。下面我们将对 Cookie 的相关知识进行详细介绍。
什么是 Cookie
Cookie 就是将浏览器浏览网页的特定信息以文件的形式保存在客户端硬盘中。当再次访问该网站的时候,浏览器会首先尝试读取 Cookie 文件,读取到的数据供浏览器使用。常见的应用就是登陆一些类似空间、博客类网页,这些网页通常每个人都有个性化的设置,通过 Cookie 技术就可以很快将它们展示出来。
Cookie 常用于以下三个方面:
- 记录访客的某些信息。就像前面说的访问空间或者博客;
- 在页面之间传递数据。通常 Cookie 不会用来保存密码之类的数据,但是一个页面的数据要在另一个页面使用时,就需要通过 Cookie 技术来实现了;
- 将查看的 Web 网页存储在 Cookie 临时文件中,可以加快网页的访问速度。
一般不建议使用 Cookie 保存数据集或其他较大的数据,同时并非所有的浏览器都支持 Cookie,并且数据信息是以明文文本的形式保存在客户端计算机中的,因此最好不要保存敏感的、未加密的数据,否则会影响网站的安全性。
创建 Cookie
在 PHP 中可以通过 setcookie() 函数创建 Cookie,不过在创建 Cookie 之前必须了解的是,Cookie 是 HTTP 响应头的组成部分,而响应头必须在页而其他内容之前发送,它必须最先输出。若在 setcookie() 函数前输出一个 HTML 标记或 echo 语句,甚至一个空行都会导致程序出错。
setcookie() 函数的语法格式如下:
setcookie(string $name [, string $value = "" [, int $expire = 0 [, string $path = "" [, string $domain = "" [, bool $secure = false [, bool $httponly = false ]]]]]])
参数说明如下:
- $name:设置 Cookie 的名称;
- $value:可选参数,用来设置 Cookie 的值。可以通过 $_COOKIE['$name'] 的形式来获取 $value 的值;
- $expire:可选参数,用来设置 Cookie 的过期时间,这个时间是 Unix 时间戳的形式。如果设置成零或者忽略该参数,Cookie 会在会话结束时过期(也就是关掉浏览器时);
- $path:可选参数,用来设置 Cookie 有效的服务器路径。 设置成 '/' 时,Cookie 对整个域名 $domain 有效。 如果设置成'/foo/',则 Cookie 仅仅对 $domain 中 /foo/ 目录及其子目录有效(比如 /foo/bar/)。默认值为设置 Cookie 时的目录;
- $domain:可选参数,用来设置 Cookie 的有效域名/子域名。设置成子域名(例如 'c.biancheng.net'),会使 Cookie 对这个子域名和它的三级域名有效(例如 php.c.biancheng.net)。 要让 Cookie 对整个域名有效(包括它的全部子域名),只要设置成域名就可以了(例如 'biancheng.net');
- $secure:可选参数,用来设置这个 Cookie 是否仅仅通过安全的 HTTPS 连接传给客户端。设置成 TRUE 时,只有安全连接存在时才会设置 Cookie;
- $httponly:可选参数,设置成 TRUE 时,Cookie 仅可通过 HTTP 协议访问,也就是说 Cookie 无法通过类似 JavaScript 这样的脚本语言访问。设置该参数可以有效的减少受到 XSS 攻击的风险。
注意:如果在调用 setcookie() 函数以前产生了输出,setcookie() 会调用失败并返回 FALSE。 如果 setcookie() 成功运行,则会返回 TRUE。
【示例】使用 setcookie() 函数创建 Cookie。
<?php setcookie('Website', 'C语言中文网'); setcookie('Title', 'Cookie', time()+3600); // 设置 Cookie 1 小时后过期 setcookie('Url', 'http://c.biancheng.net/php/', time()+3600, '/', 'c.biancheng.net', false); echo '<pre>'; print_r($_COOKIE); ?>
运行结果如下:
Array
(
[Website] => C语言中文网
[Title] => Cookie
[Url] => http://c.biancheng.net/php/
)
提示:当第一次运行这个脚本文件时并不会有任何输出信息,因此设置完 Cookie 后需要刷新一下页面,这样在下次请求时 HTTP 头部才会携带上一次设置的 Cookie 信息,这时才能读取到 Cookie。
读取 Cookie
在 PHP 中可以使用超全局变量 $_COOKIE 来读取浏览器的 Cookie 值。$_COOKIE 是一个存储着所有 Cookie 信息的数组,可以通过 $_COOKIE['Cookie 名称'] 的形式来获取具体 Cookie 的值。
【示例】使用超全局变量 $_COOKIE 获取 Cookie 的值。
<?php echo 'Website 的值为:'.$_COOKIE['Website'].'<br>'; echo 'Url 的值为:'.$_COOKIE['Url'].'<br>'; echo 'Title 的值为:'.$_COOKIE['Title']; ?>
运行结果如下:
Website 的值为:C语言中文网
Url 的值为:http://c.biancheng.net/php/
Title 的值为:Cookie
删除 Cookie
当 Cookie 被创建后,如果没有设置它的失效时间,其 Cookie 文件会在关闭浏览器时被自动删除,如果要在关闭浏览器之前删除 Cookie 文件,同样需要使用 setcookie() 函数。
删除 Cookie 和创建 Cookie 的方式基本类似,只需要使用 setcookie() 函数将 Cookie 的值(也就是第二个参数)设置为空,或者将 Cookie 的过期时间(也就是第三个参数)设置为小于系统的当前时间即可。
【示例】删除指定 Cookie 的值。
<?php setcookie('Website',''); setcookie('Title','Cookie',time()-1); echo '<pre>'; print_r($_COOKIE); ?>
运行结果如下:
Array
(
[Url] => http://c.biancheng.net/php/
)
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/23691.html