https://blog.csdn.net/ak739105231/article/details/102561723
前言:cookie是很简单的知识,也是Web端一个重要的数据来源;现在就利用Fiddler来抓取HTTP请求,理解cookie实现登录原理;
一、会话机制
http协议是无状态的;即:对于浏览器的每一次请求,服务器都会独立处理,请求之间不相关联;这样服务器并不知道是哪个用户的请求,为了让服务器识别到对应浏览器;就需要服务器、浏览器共同维持一个状态,这就是会话机制;
cookie机制是一种会话机制,cookie是浏览器用来存储少量数据的一种机制,以“key=value”形式存储。
二、认识cookie
浏览器---》服务器,通过http请求header,如:"Cookie : ip_country=CN……"
服务器---》浏览器,通过http响应header,如:"Set-Cookie : ip_country=CN……"
1.cookie的属性:
Expires属性:Expires的值是一个时间,代表过期时间;
Path属性:表示Cookie所属的路径,asp.net默认是“/”;就是根目录;cookie只能让其path路径下的页面访问;
HttpOnly属性:这是关于安全方面的属性,将一个Cookie下设置HttpOnly后,javaScript脚本将无法读取cookie信息;有效的防止了XSS攻击;
2.cookie的作用:
a.除了用来做用户认证外,还可以保存用户的一些其它信息;
b.cookie也可以用于互联网精准广告定向技术,例如:某个用户浏览了某些商品,就可以用cookie将其记下,对其精准定位。
二、cookie分类
1.会话cookie是一种临时的cookie,它记录了用户的访问站点时的设置和偏好;关闭浏览器,会话cookie就被删除了;
2.持久cookie存储在硬盘上,不管浏览器退出或者计算机重启,持久cookie都继续存在。持久cookie有过期时间;
三、cookie保存在哪里?
Cookie时存在硬盘上的,每个浏览器的cookie存储目录不同,互不干涉。
四、使用和禁用cookie
在控制面板--internet选项--》可以禁用cookie
五、网站自动登录的原理(截图也有植入cookie的方式)
在登录页面输入密码、用户名,选择保存密码单击登录(此时,你的计算机已保存好了登录的cookie,你可以找到cookie,复制下来),然后清空缓存,访问你刚刚访问的链接,带上你复制的cookie,你自己已经是登录状态了;
实例:不需用账号、密码,就可访问一个网址(如:http://athena-mf.x'x'x'x'x.com/index)
1.在B计算机登录,获取到cookie:
Cookie: JSESSIONID=0b015a9a-5741-47eb-a707-4fd2b1dc75ab;
2.在A计算机上,使用Fiddler的FiddlerScript编辑脚本,在request的header中add 这个cookie;然后在浏览器中直接访问http://athena-mf.x'x'x'x'x.com/index,你会发现你已成功登录;
六、cookie与文件缓存的区别
很多人把cookie和文件缓存混淆,其实他们是完全不一样的东西;唯一可能一样的是他们存在硬盘上的同一个目录下;
七、session与cookie与token各自的意义
1.cookie是存储在客户端,Session是存储在服务端,而客户端值存储在SessionId;
Session是将要验证的信息存储在服务端,并以SessionId和数据进行对应,SessionId有客户端存储,在请求时将SessionId也带过去,因此实现了状态的对应;
2.Token是在服务端将用户信息经过Base64Url编码过后传给客户端,每次用户请求的时候都会带上这一段信息,因此服务端拿到此段信息进行解密后就知道此用户是谁了,这个方法叫做JWT(Json Web Token);
说明:Token相比较于Session的优点是,当后端系统有多台时,由于是客户端访问时直接带着数据,因此无需做共享数据的操作;(注:Session的方式,共享数据的操作是将Session存储在Redis);
Token的优点:
1.简洁:可以通过URL,POST参数或者是在HTTP头参数发送,因为数据量小,传输速度也很快。
2.自包含:由于串包含了用户所需要的信息,避免了多次查询数据库
3.因为Token是以Json的形式保存在客户端的,所以JWT是跨语言的。
4.不需要在服务端保存会话信息,特别适用于分布式微服务。