cookie和session技术
登录凭证校验分析
判断是否具有登录凭证?
如果管理员账户密码合法,分配浏览器一个登录凭证,在向后台首页请求时,携带凭证到服务器,服务器php程序判断是否登录凭证。
凭证是如何实现的?
就是特定的数据,存在就是有凭证,否则就是没有凭证。
凭证如何储存?
如果储存到变量中:不行,变量声明周期结束,会被自动释放。
如果储存到常量中:不行,常量生命周期结束,会被自动释放。
如果储存到数据库中:不行,存储在数据库中,脚本周期结束了,不会消失,但是浏览器不能区分是那个浏览器登录的,不能区分该凭证是属于那个一个浏览器。
COOKIE SESSION 被称作会话技术。
会话技术:在同一台浏览器对某台服务器进行多次请求周期内,用来持久性存储数据的技术被称为会话技术。
1.区分浏览器。 2.多次请求数据不会丢失。
为什么会有会话技术?
B/S架构,基于HTTP协议,特点是无状态,指的是不能储存任意一次的数据请求。
COOKIE技术
就是将会话数据,储存在浏览器端的一种技术。
特点:
1.服务器负责储存数据到浏览器端。
2.浏览器在每次请求时,将记录下来的数据,携带到服务器端。
图示:
使用:
设置cookie数据
setcookie(key, value)
setcookie('name','admin');
设置指令时,是服务器向浏览器响应时候,把携带的数据发送到浏览器端。
图示:
获取cookie数据
$_COOKIE超全局数组变量。在服务器接收到浏览器请求时,php程序,会接收到所有的cookie数据,整理到$_COOKIE数组中。
1属性
1.有效期
默认:浏览器关闭时,cookie失效。该有效期cookie被称为临时cookie,也就会话cookie。
通过setcookie(key, value, 有效期=0)的第三个参数完成设置,达到控制失效时间点。
有效的表示方式为时间戳:time()可以获取当前时间戳。
一旦设置有效期,只要设置的时间过期,就会立即失效cookie,与浏览器关闭无关。该cookie就称为持久cookie。
如何判断cookie是否失效?(浏览器 or 服务器)
在设置cookie时,告知浏览器,该cookie的有效期。浏览器发出请求时候,判断cookie是否失效。也同时发生设置cookie时的相应时间。
有效期设置:time()+N
time()-1 :删除cookie的通用做法。可以设置一个值 ,表示永久不过期。PHP_INT_MAX: 表示永久不过气。
购物车网站买东西 购物车典型实现:
将商品放入到购物车:
未登录:同一台浏览器可以记录购买物品,基于浏览器。
已登录:同一个用户,记录购买物品。基于数据库用户。
2.有效路径
url路径:cookie仅仅在当前路径,和后代路径有效。
3.有效域名:
默认的cookie仅仅在当前域名下有效。
可以通过使用第五个参数的形式,进行所在一级域名设置。
4.secure,是否安全连接发送到服务器
http:
https:加密之后的http
如果将cookie设置了该属性,那么在浏览器向服务器发送请求,如果发送了非https请求,则不发送该cookie。
5.HTTPonly 是否仅仅在http请求时所使用
储存在浏览器端的cookie,可以当作浏览器脚本js,所获取到。Document.cookie.
tips:cookie数据仅仅支持字符串类型。cookie的key,支持数组的写法。
Session技术
不同于cookie技术,将会话数据储存在服务器端。
如何区分会话数据属于那台浏览器?
1.将不同会话的session数据分别储存,存在session数据区。
2.为每一个数据区,设置一个唯一的标示。
3.将唯一标示,分配到浏览器端,浏览器请求携带凭证。
图示:
session技术,基于cookie技术。session的标示session_id储存在浏览器cookie中。
对比cookie:
会话数据本身,安全性较高。
请求时携带的数据量,较少。
开启session,php核心session功能生成唯一标示,分配给浏览器,储存在数据区。
语法:
session_start();
管理session数据
$_SESSION完成所有的功能。
增删改查
$_SESSION['name'] = 'admin';
$_SESSION['pwd'] = '123';
//删除
unset($_SESSION['name']);
$_SESSION['pwd'] = 'abc';
//查询
$var_dump($_SESSION['name']);
tips:清空session操作,删除所有的session数据:$_SESSION=array();
有效期:
session在浏览器关闭时失效。