当前位置: 首页 > news >正文

Session与Cookie的区别(三)

中场休息

让我们先从比喻回到网络世界里,HTTP 是无状态的,所以每一个 Request 都是不相关的,就像是对小明来说每一位客人都是新的客人一样,他根本不知道谁是谁。

既然你没办法把他们关联,就代表状态这件事情也不存在。

把左边换成顾客,右边换成小明也依然成立。多一个得是我多打了,但我懒得修。

那怎么办呢?在故事里我们用纸条来解决这件事情,小明会在结账时写下纸条并递给客人,客人下次只要再带着纸条过来,小明就知道发生什么事了。

小纸条功不可没

小明最大的问题就是他自己没办法记忆「状态」,因此需要倚靠一个机制来帮他管理「状态」,而这个机制我们就叫做 Session。

原本对小明来说,每一个客人都是新的客人,彼此之间毫无关联,所以也没有任何状态可言。

但有了纸条以后,两个在小明眼中完全不同的客人被关联了起来,小明就可以知道:「原来这个新的客人是以前那个来买木材的客人!」

所以 Session 是什么?就是一种让 Request 变成 Stateful 的机制。以小明的例子来说,Session 就是一种让客人之间能互相关联起来的机制。

小明靠纸条来实作 Session 机制,那在网络世界中可以靠什么呢?举一个最简单的例子,网址!

让我们假设有个购物网站的网址是:market.tw,当你把苹果加入购物车的时候,你其实是送一个 Request 给服务器,然后服务器会把你导到 market.tw?

item1=apple,接着你再把火山硅肺病加入购物车,网址就会变成:market.tw?item1=apple&item2=pneumonoultramicroscopicsilicovolcanoconiosis

最后你按下结账,服务器就靠着你地址栏上的信息来判断你的状态是什么,在这个例子中就等同于看你的购物车里面有什么。

简单来说呢,地址栏上的信息就是小明故事中的纸条,是储存状态的地方。而上述例子 Client 与 Server 透过地址栏上的状态来实作 Session 机制。

好,中场休息差不多到这边要结束了。这一段是想先拉回网络的部分,从原本故事中的比喻切回真实世界网络的运作模式,以及先让大家理解 Session 到底是个什么东西。

在接下来的故事里面,小明会碰到更多更多的问题,他能迎刃而解吗?让我们继续看下去。

到底谁会随身携带纸条?

前面已经有提过了,尽管小明靠着这个纸条的机制留住了一些常客,但是新客人呢?有多少人会愿意为了再来这间店而特地留下具有状态的纸条?

基本上没有,因为这样子太麻烦了!

有天小明在快要入眠时,忽有一庞然大物拔山倒树而来,盖一灵感也。他想到了一个绝妙的 idea:「不会有人随身携带纸条,但总会随身携带手机吧!」

于是流程就变成这样子:

  • 客人来店里消费,小明结账时请他拿出手机,并在手机里面留了一些信息

  • 客人第二次来店里,小明看看手机里有没有之前自己留下的信息

先不用管到底小明把信息放在手机的哪里,这不是重点;重点是手机里的信息取代了以前的纸条,客人不用刻意再带一个没有用的纸条了,只需要把本来就会随身携带的手机拿出来就好,跟以前相比方便许多。

好,接下来我们终于要讲到标题的第二个东西了:Cookie。Cookie 是什么?Cookie 就是故事里面存在手机的信息。

想要知道真正使用 Cookie 的流程,你只要把上面的客人用「浏览器」来取代,小明用「服务器」来取代,就是答案了:

  • 浏览器发送一个 Request 给 Server,Server 叫浏览器设置 Cookie,浏览器便把这些数据存在 Cookie 里面。

  • 浏览器带着 Cookie 一起发 Request 给 Server,Server 根据 Cookie 的内容决定状态。

这次没有买火山硅肺病了

虽然在现实生活中不是每个人都会随身携带手机,但是每个浏览器都会把 Cookie 一并带上去,也会按照 Server 的指令来储存 Cookie。

你可以把 Cookie 称作是一个机制,Server 可以利用 Set-Cookie 这个语法让浏览器储存一些内容,而这些内容会在浏览器发送 Request 时一并送上来。

而浏览器里储存的那些内容也叫做 Cookie,就是我们故事中所提的小纸条或者是存在手机里的信息。

前面有提过 Session 机制可以只靠地址栏操作,跟 Cookie 可以一点关系都没有。

但在实际应用上,Session 之所以常常跟 Cookie 绑在一起,就是因为靠 Cookie 来操作 Session 机制的话非常方便。

或者应该这样说,Cookie 本来就是为了操作 Session 而生的。藉由标准化的规范,制定了一个专门用来让浏览器与 Server 交换数据的机制。

如果用故事来比喻,就好比政府制定说每个人随身一定要携带手机,然后手机里面一定要存小明留下来的状态。

这边再来做个简单的总结:

Session 是什么?就是一种让 Request 变成 Stateful 的机制。以小明的例子来说,Session 就是一种让客人之间能互相关联起来的机制。在故事里面我们用了纸条跟手机里的信息来比喻,有多种方式可以达成 Session。

在网络世界中,也有很多种方式可以来操作 Session,前面介绍过第一种是地址栏,第二种就是靠 Cookie。而 Cookie 就是存在浏览器里的一些信息。

讲到这边,差不多就把 Session 与 Cookie 的定义与介绍讲完了,但故事还没完呢,我们还有最后一个问题要来解决。

http://www.lryc.cn/news/4263.html

相关文章:

  • 七大设计原则之接口隔离原则应用
  • 【Shell1】shell语法,ssh/build/scp/upgrade,环境变量,自动升级bmc
  • JavaScript HTML DOM - 改变CSS
  • mycat连接mysql 简单配置
  • Spring常用注解
  • I.MX6ULL内核开发9:kobject-驱动的基石
  • Docker-harbor私有仓库
  • Java之动态规划之子序列问题
  • java ArrayList
  • 前端——周总结系列四
  • Linux重定向符、管道符讲解
  • 【C++】多态
  • 分布式项目-品牌管理(5、6)
  • 自定义ESLint规则开发与使用
  • 【JavaScript】35_包装类与垃圾回收机制
  • 【CS224W】(task3)NetworkX工具包实践
  • ansible的模块详解
  • 《Terraform 101 从入门到实践》 Functions函数
  • 使用kubeadm快速部署一个K8s集群
  • 初探富文本之CRDT协同算法
  • Dubbo和Zookeeper集成分布式系统快速入门
  • 大数据工具Maxwell的使用
  • freesurfer如何将组模板投影到个体空间——如投影 Schaefer2018 到个体空间
  • Matlab傅里叶谱方法求解二维波动方程
  • 【深度学习】卷积神经网络
  • 【C++】六个默认成员函数——取地址重载,const成员函数
  • Win11浏览器无法上网,秒杀网上99.9%教程—亲测完胜
  • Vulkan Graphics pipeline Dynamic State(图形管线之动态状态)
  • CSP-《I‘m stuck!》-感悟
  • [实践篇]13.19 Qnx进程管理slm学习笔记(二)