Cookie是HTTP协议中规定的一个请求头字段 ,用于在浏览器与服务器之间互相传递数据。
一,cookie 与 本地存储的区别
Cookie 和storage 很像 , 但是有区别。
的存储量很小,一般大小不超过4kb,storage 5M。
cookie的存储量小是因为cookie本身不是做存储的,主要是用来跟踪用户身份的。
需要服务器环境
http的特点是无状态的,cookie用来跟踪用户身份。
cookie可以在客户端与服务端来回传输。
数据不共享 , localStorage数据共享 ,cookie是数据共享的 (同一个服务器)
二,cookie的操作
存 setItem()
取 getItem()
删 removeItem() clear()
1.存
document.cookie = 'username=xiaoming';
document.cookie = 'age=20';
- 1
- 2
2.取
程序会取出所有的cookie数据, 程序会自动添加 分号 + 空格 连接多组数据
console.log( document.cookie ); //只能一起取,不能取单条数据
- 1
3.删
因为cookie并没有提供好用的方法, 所以需要自己去封装(setCookie , getCookie ,removeCookie)
cookie 默认是临时性存储的, 一旦页面关闭了,cookie的数据就消失了。
想要多存储一会儿, 加一个过期时间。
var date = new Date();
date.setDate( date.getDate() + 5)
document.cookie = 'username=xiaoming;expires' +date;
- 1
- 2
- 3
- 4
三,封装
function setCookie(key,value,time){
var date = new Date();
date.setDate( date.getDate() + time);
document.cookie = ' ${key} = ${value} ; expires=${date}';
}
setCookie('username','xiaoming' , 5);
setCookie('age','20' );
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
function getCookie(key){
var arr1 = document.cookie.splite(';');
for(var i=0;i<arr1.length;i++){
var arr2 = arr1[i].split('=');
if( key == arr2[0]){
return decodeURIComponent(arr2[1]);//防止乱码,来解码
}
}
}
console.log(getCookie('username'));
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
function removeCookie(key){
setCookie(key,'',-1);
}
- 1
- 2
- 3
四,php中cookie的应用
php中获取传输过来的cookie
echo $_cookie['username'];
- 1
存
setcookie('gender','man');
- 1
删
setcookie('age','') //age等于空
- 1
Application 中的 HttpOnly 是只有后端能用的cookie
domain参数
解决跨域
domain=
domain=
cookie在一级域名和二级域名之间是有跨域问题的,domain设置成相同的来解决。
path参数
子文件夹能访问父文件夹数据
当前这个目录下的所有cookie是共享的
比如给goods文件下设置了cookie , / 下能获取cookie吗 ?不能 , 在goods设置cookie的时候,指定path = /
Secure参数 是 https的s
SameSite 与安全相关的
五,跟踪用户身份,记录登录状态
//存
setcookie('gender','男',null ,null ,null ,null , true);
//删
setcookie('age','');
//PHP中获取传输过来的cookie , 取
echo $_COOKIE['username'];
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
六,Session
怎么实现凭证(生成二维码) cookie + session (临时会话,也是存储数据的,但是只能在后端)
要想使用session , 必须先开启
session_start();
$_SESSION[‘username’] = $name; //设置session
setcookie( session_name(),session_id() ,time() + 3600245, ‘/’ );
七,HTTP协议的无状态
前端解析域名 ,建立与服务器的TCP连接 ,发送请求, 得到数据 ,断开连接 。
因为断开了连接 ,导致服务器与浏览器之间互相不知道对方的情况,这种就叫做无状态 。
所谓的无状态指的就是连接最终会被断开 。