cookie会话技术
介绍
当同一用户多次请求相同服务器时,通过http协议辨别用户身份,从而不需要进行额外身份验证。这样我们可以为用户保留他们的一些访问数据在他们的浏览器上,从而下一次他们再访问这个网站时就不用再登录啊之类的了,好比浏览商品时的上次访问一样。
分类
cookie技术
cookie保存在浏览器上的小文本文件,可以包含用户信息,web网站可以访问cookie信息
session技术
session将数据保存到服务器端,保存通信时间间隔,web网站可以访问session信息,session技术实现依赖cookie技术
区别
安全
session储存在服务器,安全性高
cookie储存在浏览器端,安全性低
数据大小
cookie数量和大小有限制(20个/4k)
session数据存储不限
可用数据类型
cookie只能存储简单数据,例如数值/字符串
session可以存储复杂数据(自动序列化)
保存位置
cookie保存在浏览器上
session保存在服务器上
cookie的原理与使用
1.第一次请求时,php通过setcookie函数将数据通过http协议响应头传给浏览器
2.浏览器在第一次响应时将cookie数据保存到浏览器
3.浏览器后序请求同一个网站的时候,会自动检测是否存在cookie数据,如果存在将在请求头中将数据携带到服务器
4.php执行的时候会自动判断浏览器是否携带cookie,如果携带,自动保存到$_COOKIE
中
5.利用$_COOKIE
访问cookie数据
设置cookie信息
函数setcookie[字符串,值,(值为)整数或字符串]
setcookie('age',1);
setcookie('name','Mark');
读取cookie信息
var_dump($_COOKIE);
cookie能够实现跨脚本共享数据
cookie生命周期
cookie在浏览器生存时间(浏览器在下次访问服务器时是否携带对应的cookie)
1)默认不设定时的生命周期:浏览器关闭
2)设定为一个常规日期戳的周期:setcookie的第三个参数设定时间,一定要加上当前格林威治时间,否则日期错误
setcookie('a2','a2',time() + 7*24*60*60);
时间无效的话,浏览器直接没有那个cookie
3)设定为0的周期
相当于会话结束,浏览器关闭的周期
4)"删除"一个cookie内容的做法
服务器没有权限去操作浏览器上的内容
可以设定生命周期来让浏览器自动判定
cookie作用范围
默认cookie是在不同的文件夹下有访问限制
上层文件夹中设定的cookie可以在子文件夹中访问,而反之则不行
上层看不到下层内容但是下层能看到上层
1)默认不设定的范围
2)设定为/的含义:告知cookie的作用范围是网站根目录
setcookie(名字,值,生命周期,作用范围)
例如
setcookie('global_son','global_son',0,'/');
cookie跨子域
跨子域:在同一级别域名下,XXX.com(一级域名)
不同子域搭建在不同的服务器上(相当于不同的根目录)但是可以通过cookie设置实现对应的cookie共享访问,但是默认是不允许跨域名访问的。
1)设定cookie的有效域名
2)不设定时的默认有效域名
3)跨子域的设定方法
在设定域名访问的时候用设定上级域名即可,这个使所有以myitcast.com结尾的网站都可以共享cookie
例如
setcookie('local2','local2',0,'/','www.myitcast.cn');
setcookie('global','global',0,'/','myitcast.com');
cookie数组数据
cookie本身不支持数组,必须想办法凑成数组
利用这个浏览器碰到[]就判定为数组的漏洞来保存那些数组数据,从而更方便保存与利用部分用户浏览数据
1)设置形式:setcookie('c1[k1],值')
setcookie('goods_ids[0]',1);
setcookie('goods_ids[1]',2);
setcookie('goods_ids[2]',3);
print_r($_COOKIE);
2)读取形式:$_COOKIE['c1']['k1']
echo $_COOKIE['good_ids'][2];