状态保持
一、http无状态协议:前端向后端发请求时,后端只会返回相应的数据,但是不会记录任何信息。所以浏览器每次向后端发送请求,后端都会把它当成一次新的请求对待。
优点:服务器不需要先前的信息,回应会比较快。
缺点:如果浏览器发送请求需要先前的信息,那么会导致每次传输的数据量变大。
二、状态保持
http无状态功能有时候严重阻碍了某些功能的实现,交互是需要承前启后的。因此为了解决这种问题,两种保持状态的技术就应运而生了。
一种是cookie,一种是session
1.cookie:cookie存储了一些服务端发送给客户端的一些特殊信息,这些信息以文本的形式保存在客户端,每次客户端向服务端发送请求时,都会把这些信息带上。
特点:
cookie存储在客户端
cookie在http中才有效
cookie最大不超过 4k
每次发送请求都会带上cookie
cookie有自己的同源策略,不同源的网站cookie不能共享
cookie有有效期,js中cookie有效期可以通过max-age设置,单位是秒。jquery中cookie有效期则通过expires设置,单位为天。
cookie只能是字符串,扔一个对象需要把对象转成字符串。
##访问原则:子路径可以访问父路径的cookie,父路径无法访问子路径中的cookie
js操作cookie
cookie是document的一个属性,格式是一个字符串
设置cookie:
document.cookie="name=zs;max-age=60";
document.cookie="age=18;max-age=60";
expires可以指定具体时期
document.cookie="name=mc;expires="+new Date("2017-08-06 14:20:00"
删除cookie,cookie无法直接删除,可以通过设置有效期为-1
document.cookie="name=mc;max-age=-1;path:/";
##记住要带上路径path:/;
jquery操作cookie
设置cookie:
$.cookie('name','value',{expires:1,path:/})
获取cookie
$.cookie("name");
移除cookie
$.removeCookie("name");
2.session
与cookie对应,通过服务器来保持状态
定义:session指的是服务端为客户端开辟的存储空间,用来保存一些特殊信息,其中保存的信息就是用来保存状态。
session为客户端请求开辟一个小空间,每个空间都对应唯一的ID.
前端只需要关注,怎样向session中存放东西,以及怎样获取session的数据。
session的操作
//1. 开启session
session_start();
//2. 设置内容
$_SESSION["name"] = "zhangsan";
$_SESSION["age"] = 18;
//3. 获取session
echo $_SESSION["name"];
//4. 同一个服务器中,session也是可以共享的
cookie与session实现状态保持
a.第一次访问服务端时,session_start()函数会生成一个PHPSESSID,返回给客户端。
b.客户端会将PHPSESSID保存下来,每次请求都会带上cookie.
c.下次请求时,服务器就可以通过PHPSESSID来判断客户端的身份了
d.要实现状态保持,cookie与session缺一不可。