PHP 中cookie的使用及原理

1.什么是 cookie?

Cookie保存在客户端浏览器中,cookie是Http头的一部分,通过浏览器请求页面时,它会被通过Http头的形式发送过去。被请求的页面,可以通过PHP来获取cookie的值。

Cookie和浏览器和域名相关,不同浏览器各自存储,cookie只会在当前域名发送,其他域名不会带上cookie去请求。

2.设置 cookie

setcookie(name,value,expire,path,domain,secure)

参数说明:

1.name:Cookie 的变量名

可以通过 $_COOKIE[“cookiename”] 调用变量名为 cookiename 的 Cookie

2.value:Cookie 变量的值,该值保存在客户端,不能用来保存敏感数据

可以通过 $_COOKIE[“values”] 获取名为 values 的值

3.expire:Cookie 的失效时间,expire 是标准的 UNIX 时间标记,可以用 time()函数获取,单位为秒

如果不设置 Cookie 的失效时间 ,那么 Cookie 将永远有效,除非手动将其删除

4.path:Cookie 在服务端的有效路径

如果该参数设置成 “ / ”,则它在整个 domain 内有效, 如果设置为 “ /11 ”,它在 domain 下的 /11 目录及子目录内有效。默认是当前目录

5.domain:Cookie 有效地域名

如果要使 Cookie 在 abc.com 域名下的所有子域名都有效,应该设置为 abc.com

6.secure:指明 Cookie是否通过安全的 HTTPS,值为 0 或 1

如果值为1,则 Cookie 只能在 HTTPS 连接上有效;如果值为默认值 0,则 Cookie 在 HTTP 和 HTTPS连接上均有效。

实例:

setcookie('validCode','value',time()+3600*12,'/','www.test.com');
cookie名称:validCode
cookie值:value
过期时间:12小时后过期
可以拿到cookie的页面:所有页面
可以拿到cookie的域名:www.test.com

图文解析(敲黑板):

$cookieValue = 'value';
$flag = setcookie('validCode', $cookieValue,time()+60,'/');

首次设置,响应头Set-Cookie已经有名为validCode的信息了,表示该cookie已存放在硬盘中该浏览器的cookie目录里了

请求头里面此时还没携带改Cookie,下次请求就会带上了。

未携带
携带

设置完成后再请求页面就会携带cookie了:(如果限制了路径或域名,则只会在指定的页面才会携带cookie去请求)

3.获取Cookie

$cookieValue ='';
if (isset($_COOKIE['validCode']))   //首先判断是否已设置了该cookie
{
    $cookieValue = $_COOKIE['validCode'];
}

4.销毁Cookie

可以通过设置cookie过期时间为以前的时间点来销毁:
setcookie("user", "", time()-3600);

5.Cookie注意事项

1、setcookie()之前不能有任何html输出,就是空格,空白行都不行。
2、setcookie()后,你在当前页调用echo $_COOKIE[“name”]不会有输出。必须刷新或到下一个页面在过期之前才可以看到Cookie值。
3、由于cookie信息存储于用户的计算机中,那么就有可能伪造或修改Cookie从而造成Cookie 欺骗,一般可以对cookie的值进行加密来预防欺骗。读取Cookie的时候,对Cookie解密即可。
4、Cookie是保存在客户端的,用户禁用了Cookie,你的Cookie自然也就没作用啦!

发表评论

电子邮件地址不会被公开。 必填项已用*标注