Cookie

时间:2025-01-15 22:35:48

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连接 ,发送请求, 得到数据 ,断开连接 。
因为断开了连接 ,导致服务器与浏览器之间互相不知道对方的情况,这种就叫做无状态 。

所谓的无状态指的就是连接最终会被断开 。