Cookie 是什么
1. Cookie 是浏览器访问服务器后,服务器传给浏览器的一段数据。
2. 浏览器需要保存这段数据,不得轻易删除。
3. 此后每次浏览器访问该服务器,都必须带上这段数据。
Cookie 就是这么简单,这就是 Web 开发里 Cookie 的含义。
如何使用 Cookie
Cookie 一般有两个作用。
第一个作用是识别用户身份。
比如用户 A 用浏览器访问了 http://a.com,那么 http://a.com的服务器就会立刻给 A 返回一段数据「uid=1」(这就是 Cookie)。当A 再次访问 http://a.com的其他页面时,就会附带上「uid=1」这段数据。
同理,用户 B 用浏览器访问 http://a.com时,http://a.com发现 B 没有附带 uid 数据,就给 B 分配了一个新的uid,为2,然后返回给 B 一段数据「uid=2」。B 之后访问 http://a.com的时候,就会一直带上「uid=2」这段数据。
借此,http://a.com的服务器就能区分 A 和 B 两个用户了。
第二个作用是记录历史。
假设 http://a.com是一个购物网站,当 A 在上面将商品 A1 、A2 加入购物车时,JS 可以改写 Cookie,改为「uid=1; cart=A1,A2」,表示购物车里有 A1 和 A2 两样商品了。
这样一来,当用户关闭网页,过三天再打开网页的时候,依然可以看到 A1、A2 躺在购物车里,因为浏览器并不会无缘无故地删除这个 Cookie。
借此,就达到里记录用户操作历史的目的了
为什么需要Cookie:
想象一下老师和学生的场景,一个大学老师,一学期一门课教的学生起码有几十个,那他总不可能记得住每个人的姓名吧(这就是HTTP协议的无状态性,我不会去把学生的姓名记住,因为这样太耗费脑细胞(太耗资源)),如果有一个学生问我要作业我又不知道他姓名怎么办。Cookie技术就应运而生,我会给每一个学生一个编号(在网络层面需要客户端先向服务器端发送请求,服务器会随即给客户端一个cookie),你下次问我要作业,请先告诉我你的编号(带上cookie),我按照编号给你作业。
那么session和cookie有什么区别呢?
想象一下,有一个A同学,编号为1;B同学,编号为2。A同学看B同学很不爽,想从老师这拿走B的作业搞破坏,A同学就去问老师要作业,然后要作业的时候跟老师说我的编号是2,老师就把编号2,也就是B同学的作业给A了。
总要避免这种情况的发生吧。
- Seesion技术就应运而生了,cookie技术的一个很大的问题在于,cookie 中的所有数据在客户端就可以被修改。这就意味着数据非常容易被伪造,一些重要的数据就不能存放在 cookie 中。
- 那么session技术的作用可以理解为:老师为了避免这种情况的发生,开学的时候给每个人都拍了一张照,每次学生来拿作业的时候除了要报上自己的编号,老师还要依据照片来判别学生编号和照片能不能对应起来,如果不能就不给作业;
- 说到这,seesion其实是存放在服务器端的(照片总得存放在老师这把),而cookie是存放在用户也就是浏览器这边的(每次要作业就得报上自己的编号)
本文部分转载自https://zhuanlan.zhihu.com/p/22396872