大白话理解cookie机制

HTTP协议是一个无状态的协议,服务器无法区分出请求是哪个客户端发送的。

需要通过会话控制来解决这个问题,会话控制主要有两种方式Cookie Session

Cookie机制:

Cookie由服务器创建,会根据响应报文Response HeadersSet-Cookie字段信息,通知客户端保存Cookie客户端收到Cookie以后,会将其自动保存。

在下次向服务器发送请求时会自动将Cookie以请求的形式发服务器收到以后就可以检查请求头中的Cookie并且可以根据Cookie中的信息来识别出不同的用户。

简言之,

服务端通过 Set-Cookie 响应头来向客户端设置 Cookie

客户端通过 Cookie 请求头向服务端发送之前存储的 Cookie 数据。

example:

一、第一次发送请求,响应报文Response Headers里面Set-Cookie有如下属性:

 logcookie=3qjj; expires=Wed, 13-Mar-2019 12:08:53 GMT; Max-Age=31536000; path=/; domain=fafa.com;secure; HttpOnly;

 

 二、再次发送请求时,请求报文里都自动发送Cookie信息了。

 

Set-cookie:name=name;expires=date;path=path;domain=domain;secure;HttpOnly

1) name=name//有多个name值时用";"分隔例如:name1=name1;name2=name2 

2) expires=date //cookie的有效期限,格式为:expires="Wdy,DD-Mon-YYYY HH:MM:SS"  

3) path=path //设置cookie支持的路径, 

若path是一个路径,则cookie对这个目录下的所有文件及子目录生效,例如:path="/cgi-bin/",若path是一个文件,则cookie指对这个文件生效,例如:path="/cgi-bin/cookie.cgi" 

4) domain=domain //对cookie生效的域名,例如:domain="gzdzw.51.net" 

5)secure属性: 表示cookie发送到http或https请求。值为0或1,

默认值为 0,cookei在http和https连接上都有效。 值为1,则cookie只在https连接上有效,

6)httponly属性: 用来设置cookie是否能通过 js 去访问。

若 HttpOnly = true 的话,那此Cookie 只能通过服务器端修改, document.cookie

无法读取到这个 Cookie 信息,它只会出现在请求的报文头内

Js获取Cookie 的时候就会跳过HttpOnly = true 的Cookie 记录,也就无法删改了。

凡是httpOnly类型的cookie,其 HTTP 一列都会打上√

session和cookie区别:

session: 服务器端创建, 服务器端保存, 依赖于cookie,且会在一定时间内保存在服务器上,当访问增多,会比较占用你服务器的性能

cookie: 服务器端创建, 浏览器端保存, 请求携带对应cookie, 长度和数量有限制(4kb),且不安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗

参考:

https://juejin.im/post/5aa783b76fb9a028d663d70a

猜你喜欢

转载自www.cnblogs.com/renzm0318/p/11643841.html