学习目标

  • COOKIE概述、操作、删除、配置
  • SESSION概述、操作、删除、配置
  • SESSION的垃圾回收

COOKIE概述

1、什么是COOKIE?

  • 简单来说,Cookies就是服务器暂时存放在你的电脑里的资料(.txt格式的文本文件),好让服务器用来辨认你的计算机(通常经过加密);
  • Cookie是由服务器端生成,发送给User-Agent(一般是浏览器),浏览器会将Cookie的key/value保存到某个目录下的文本文件内,下次请求同一网站时就发送该Cookie给服务器
  • Cookie名称和值可以由服务器端开发者定义,这样服务器可以知道该用户是否是合法用户以及是否需要重新登录等,服务器可以设置或读取Cookies中包含信息,借此维护用户跟服务器会话中的状态。

注意:每种浏览器都可以存储COOKIE数据;各个浏览器之间的COOKIE数据不能共享。

2、IE浏览器查看COOKIE数据

访问路径:工具栏菜单 >> internet选项 >> 常规选项卡 >> 浏览器历史记录 >> 设置 >> 查看文件

3、使用COOKIE的好处

  • 用户登录时,记住登录账号和密码,为下一次登录时简化操作;
  • 另一个重要应用场合是“购物车”之类处理。用户可能会在一段时间内在同一家网站的不同页面中选择不同的商品,这些信息都会写入Cookies,以便在最后付款时提取信息。
  • 跟踪统计用户访问网站的习惯。什么时间访问,访问了哪些页面,页面停留时间等,为用户提供个性化服务,为网站营销提供参考。

4、COOKIE的工作原理

setcookie.php页面

<?php
setcookie('userName', 'Man Yacan');
setcookie('password', '981001');

getcookie.php页面

<?php
print_r($_COOKIE);
COOKIE的工作原理
COOKIE的工作原理
第1次请求和第1次响应
第1次请求和第1次响应
经过第一次访问之后,浏览器中已经存储了COOKIE信息
经过第一次访问之后,浏览器中已经存储了COOKIE信息
**第2次请求和第2次响应**
**第2次请求和第2次响应**

COOKIE操作

1、添加COOKIE数据

  • 描述:向客户端发送一个 HTTP cookie。
  • 语法:

    bool setcookie ( string $name [, string $value [, int \$expire = 0 [, string \$path [, string $domain [, bool \$secure = false [, bool $httponly = false ]]]]]] )
  • 参数:

    • $name,cookie的名称;
    • $value,cookie的值,会自动进行 URL 编码。接收时会进行 URL

      解码。**COOKIE值的类型只能是标量数据类型,不可是数组、对象、资源**。
      
    • $expire,cookie的有效期(当前时间戳秒数+要保存的时间);
    • $path,cookie的服务器路径;
    • $domain,cookie的域名;
    • $secure,规定是否通过安全的 HTTPS 连接来传输 cookie。
  • 返回:设置成功返回TRUE,失败返回FALSE。

2、读取COOKIE数据

  • 描述:获取cookie数据是通过超全局数组$_COOKIE来实现的。
  • 语法:value = $_COOKIE[key]

COOKIE设置

1、COOKIE过期有效性设置

(1)即时性COOKIE设置

  • 描述:默认cookie的有效期是关闭浏览器时,自动失效。该cookie称为临时cookie;
  • 语法:

    bool setcookie ( string $name , string $value [, int $expire = 0 ])
  • 参数:$expire可选,指定cookie保存的时间,默认为0,关闭浏览器失效;
<?php
setcookie('userName', 'Man Yacan', time()+7*24*60*60); // 设置COOKIE有效期为一个星期
setcookie('password', '981001', time()+7*24*60*60);

(2)有效性COOKIE设置

  • 语法:

    bool setcookie ( string $name , string $value [, int $expire = 0 ])
  • 参数:$expire可选,指定cookie保存的时间,默认为0,关闭浏览器失效;
  • 说明:$expire为一个时间戳。一般用time()+N表示新的时间戳。在当前时间点,再加上N秒后,产生一个新的时间戳。
  • 提示:一旦指定了有效的过期时间,cookie失效跟关闭浏览器无关(持久cookie)。

2、COOKIE路径有效性

  • 描述:设置COOKIE只能在指定的目录及其子目录下有效
  • 语法:

    bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path]]] )
  • 参数:$path默认为"/"(网站根目录),代表当前网站根目录,在当前目录及其所有子目录都可以使用。
  • 说明:由于浏览器每次请求时,携带到服务器端很多的COOKIE数据,会导致请求数据变得庞大;将COOKIE划分到各个路径中,减少每个路径下COOKIE的数量。

例如:京东保存在客户端的有1万个COOKIE数据,大小为100MB,每次请求都需要1个小时。这样一来,每次请求带1个万COOKIE,但是当前页码只使用2个COOKIE,造成带宽浪费。

解决方案是:请求页面需要什么COOKIE,就带什么COOKIE过去,有针对性,会节省宽带。

<?php
// 设置COOKIE有效期为一个星期,并且只有在客户端访问网站根目录的public目录下时浏览器所
// 送发的请求头中才会携带该COOKIE数据
setcookie('userName', 'Man Yacan', time()+7*24*60*60, '/public'); 
setcookie('password', '981001', time()+7*24*60*60, '/public');

3、COOKIE域名有效性

  • 描述:给一个COOKIE指定访问的域名
  • 语法:

    bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain]]]] )
  • 提示:默认情况下,cookie只能在当前域名下有效。
  • 域名划分:

    • 主域名:itcast.cn(所有主域名下的域名都可以访问)
    • 一级域名:www.itcast.cn(只在当前主站可以访问)
    • 二级域名:news.itcast.cn(只在此二级目录下可以访问)
    • 三级域名:php.news.itcast.cn(只在此三级目录下可以访问)
  • 说明:如果COOKIE域名有效性,设置为主域名,则在所有域名下都可以使用。如果设置为子域名,则只能在子域名下使用该COOKIE。

4、是否仅https安全连接才能发送cookie呢?

  • 描述:是否仅限https来发送COOKIE数据,默认情况下,为http协议发送;
  • 语法:

    bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false]]]]] )
  • https:是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL,因此加密的详细内容就需要SSL。

5、是否只能通过http协议来使用COOKIE呢?

  • 描述:客户端的COOKIE除了可以通过HTTP协议来使用外,还可以使用JS来使用COOKIE。
  • 语法:

    bool setcookie ( string $name [, string $value [, int $expire = 0 [, string $path [, string $domain [, bool $secure = false [, bool $httponly = false ]]]]]] )

提示:除了COOKIE通过http发往服务器使用,JS也可以使用该COOKIE(设置为False)。

删除COOKIE数据

1、设置COOKIE有效性为过去的某一个时间

  • 描述:设置有效期为过去的某一个时间
  • 语法:

    bool setcookie ( string $name [, string $value [, int $expire = 0 ]] )
<?php
// 删除COOKIE举例
setcookie('userName', 'Man Yacan', time()-1); 
setcookie('password', '981001', time()-1);

2、设置COOKIE的值为false或空字符串

<?php
setcookie('userName', 'Man Yacan', false); 
setcookie('password', '981001', '');

3、清理浏览器缓存

在浏览器中删除COOKIE
在浏览器中删除COOKIE

COOKIE的总结

  • COOKIE存储在客户端,相对来说不太安全。
  • COOKIE存储的数据类型,只能是字符串(简单数据)。
  • COOKIE存储的数据容量,大约只能存储4KB数据。
  • 浏览器可以禁用缓存,也可以禁用COOKIE,则COOKIE功能就失效。