简析Cookie和Session

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了。

总要避免这种情况的发生吧。

  1. Seesion技术就应运而生了,cookie技术的一个很大的问题在于,cookie 中的所有数据在客户端就可以被修改。这就意味着数据非常容易被伪造,一些重要的数据就不能存放在 cookie 中。
  2. 那么session技术的作用可以理解为:老师为了避免这种情况的发生,开学的时候给每个人都拍了一张照,每次学生来拿作业的时候除了要报上自己的编号,老师还要依据照片来判别学生编号和照片能不能对应起来,如果不能就不给作业;
  3. 说到这,seesion其实是存放在服务器端的(照片总得存放在老师这把),而cookie是存放在用户也就是浏览器这边的(每次要作业就得报上自己的编号)

 

 本文部分转载自https://zhuanlan.zhihu.com/p/22396872

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值