一、Cookie
一句话来概述,Cookie就是保存在客户端也就是浏览器里的数据缓存。
cookie在哪里?
我们可以在我们的浏览器里面轻易的查到。
-
如按F12后在调试者模式的console里面输入document.cookies 就可以看到。
-
或者在调试者模式的network里面点击某些请求也可以找到。(如果Network没有数据请按F5刷新。)
cookie有什么用?
找到cookie的办法多种多样,那么为什么需要cookie呢?
首先我们知道http基本上都是无状态的短连接(HTTP1.1支持长连接)。每一次请求对于服务端来说都是新的。那么设想一个电商网站的场景,一个用户想要买一件衣服,那么他需要做三个操作。
- 登录
- 把衣服加入购物车
-
点击下单按钮
那么现在问题来了,当用户做完第一步登录后,第二步中加入购物车我们需要发送一个什么请求呢?
服务端需要知道谁把衣服加到了他自己的购物车,那么至少需要两个参数:1.用户的标识(如用户id) 2.衣服的标识(如商品id)。
但大家都知道其实我们登录之后,再点击购买按钮就可以购买衣服了,不需要再输入一次自己的用户id,因为用户的信息已经在第一步登录的时候就被缓存在浏览器中。那么发送请求的时候从浏览器的cookie里面获取用户id,在组合用户输入的商品id作为请求发给服务端,服务端就能将衣服添加到购物车了。
用户登录之后好像是服务端记住了他,其实是每次浏览器发新请求的时候都把自己放在cookie里面的信息又重新告诉了浏览器一遍。
那么现在的问题是浏览器发给服务端的信息服务端就都该相信吗?既然浏览器在本地,那么我可以任意修改里面的数据,我把自己cookie里的用户id改成了Jack马的,那么岂不是可以一直用Jack马的账号给我买东西了?
你可能会说加个验证机制不就ok了,不但把用户名放在cookie里面这次把密码也加到cookie里面去,服务端以后要求你再发请求就必须要发一下密码,让我来判断你是不是本人。这种机制也不是不可以,就是比较繁琐因为你每发一次请求都要带用户名密码过去,且不说安全性的问题,效率上就不太好,那么有没有什么更好的机制呢? 那就是利用Session机制。