会话技术
会话技术的介绍
web会话可简单理解为:用户开一个浏览器,访问某一个web站点,在这个站点点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一个会话。
HTTP协议的特点是无状态/无连接,当一个浏览器连续多次请求同一web服务器时,服务器是无法区分多个操作是否来自于同一浏览器(用户)。会话技术就是通过HTTP协议想办法让服务器能够识别来自一个浏览器的多次请求,从而方便浏览器(用户)在访问同一个网站的多次操作中,能够持续进行而不需要进行额外的身份验证。
会话技术分类
1)cookie技术
Cookie是在HTTP协议下,服务器或脚本可以维护客户工作站上信息的一种方式。Cookie是由web服务器保存在用户浏览器(客户端)上的小文本文件(HTTP协议响应头),它可以包含有关用户的信息。无论何时用户链接到服务器(HTTP请求携带数据),Web站点都可以访问Cookie信息。
2)session技术
Session直接翻译成中文比较困难,一般都翻译成时域。在计算机专业术语中,Session是指一个终端用户与交互系统进行通讯的时间间隔,通常指从注册进入系统到注销退出系统之间所经过的时间。如果需要可能还有一定的操作空间。Session技术是将数据保存在服务器端,无论何时用户链接服务器,Web站点都可以访问Session信息。Session技术的实现是依赖COOKIE技术的。
两种会话技术区别
1)安全性方面
a)Session储存服务器端,安全性高
b)Cookie储存浏览器端,安全性低
2)数据大小方面
a)Cookie储存的数量和大小都有限制(20个/4K)
b)Session数据存储不限
3)可用数据类型
a)Cookie只能存储简单数据,数值/字符串
b)Session可以存储复杂数据(自动序列化)
4)保存位置方面
a)Cookie保存在浏览器上
b)Session保存在服务器上
COOKIE的基本使用
cookie原理
COOKIE技术:服务器将数据通过HTTP响应存储到浏览器上,浏览器可以在以后携带对应的COOKIE数据访问服务器
1、第一次请求时,PHP通过setcookie函数将数据通过http协议响应头传输给浏览器
2、浏览器在第一次响应的时候将Cookie数据保存到浏览器
3、浏览器后续请求同一个网站的时候,会自动检测是否存在Cookie数据,如果存在将在请求头中将数据携带到服务器
4、PHP执行的时候会自动判断浏览器请求中是否携带Cookie,如果携带,自动保存到$_COOKIE中
5、利用$_COOKIE访问COOKIE数据
设定cookie信息
Setcookie函数用来设定COOKIE信息
Setcookie(名字,值)
1)cookie名的设置:字符串,第一个参数
2)cookie值的设置:第二个参数
3)cookie值的类型要求:必须是简单类型中的整数或者字符串
读取cookie信息
1)$_COOKIE数组的使用
COOKIE(会话技术)能实现跨脚本共享数据
COOKIE生命周期
COOKIE生命周期:COOKIE在浏览器生存时间(浏览器在下次访问服务器的时候是否携带对应的COOKIE)
1)默认(不设定)时的生命周期:不设定周期默认是关闭浏览器(会话结束)
2)设定为一个常规时间戳的周期:通过setcookie第三个参数可以限定生命周期,是用时间戳来管理,从格林威治时间开始
3)设定为“0”的周期:在第三个参数设定生命周期的时候,用0代替时间戳:表示就是普通设置,会话结束过期
4)删除一个cookie的做法
服务器没有权限去操作浏览器上的内容(不可能删除)。可以通过设定生命周期来让浏览器自动判定COOKIE是否有效:无效就清除。
COOKIE作用范围
作用范围:不同的文件夹层级中,设定的COOKIE默认是在不同的文件夹下有访问限制。上层文件夹中设定的COOKIE可以在下层(子文件夹)中访问,而子文件夹中设定的COOKIE不能在上层文件夹中访问。
1)默认(不设定)的范围:就是使用COOKIE默认的作用范围
2)设定为“/”的含义:告知浏览器当前COOKIE的作用范围是网站根目录
Setcookie(名字,值,生命周期,作用范围)
COOKIE跨子域
跨子域:在同一级别域名下,XXX.com(一级域名),可以有多个子域名(www.XXX.com和gz.XXX.com),他们之间是搭建在不同的服务器上(不同文件夹),但是可以通过COOKIE设置实现对应的COOKIE共享访问。但是默认是不允许跨域名的。
1)设定cookie的有效域名:不同的域名(包含主机)之间不能共享COOKIE可以通过setcookie的第五个参数来控制
Setcookie(名字,值,生命周期,作用范围,有效域名)
2)不设定时的默认有效域名:不设定默认为访问的域名
3)跨子域的设定方式:在设定域名访问的时候用设定上级域名即可,所有使用上级域名结尾的网站都可以使用COOKIE
COOKIE数组数据
COOKIE本身只支持简单数据(数字或者字符串),能够保留的数据本身有限,也不成体系。如果需要使用COOKIE来保留一组数据的话,想办法凑成数据。(COOKIE不支持数组)
1)设置形式:setcookie(‘c1[k1]’,值)
2)读取形式:$_COOKIE[‘c1’][‘k1’]