第1章 Cookie模拟登录(1.1 模拟登录的原理)

  • 尽管Cookie模拟登录的代码并不复杂,但是所谓“知其然,更要知其所以然”,在进行编程实践之前,我们仍然有必要了解Cookie模拟登录的原理。Cookie模拟登录的原理涉及5个知识点:(1)客户端与服务端;(2)HTTP的无状态性;(3)Cookie的含义与作用;(4)Session的含义与作用;(5)Cookie与Session的交互。其中知识点(1)和知识点(2)是为知识点(3)~(5)做铺垫,简单了解即可。

1.1.1 客户端与服务端

  • 在网站访问中存在客户端和服务端这两个概念。客户端可理解为“客户”或“用户”,也就是接收服务的一方,准确来说是本机(本人的计算机);而服务端则可视为“服务员”,也就是提供服务的一方,准确来说是网络服务器,也称为服务端(简称服务端)。关于服务器的知识将在第7章学习,目前可以把服务器理解为部署在相关网站公司的一台很大的计算机。
  • 例如,我们在使用本机的浏览器访问淘宝网时,浏览器就是客户端;而淘宝网是为我们提供服务的,那么淘宝网的服务器或者说淘宝网就是服务端。

1.1.2 HTTP的无状态性

  • HTTP具有无状态性,意思是HTTP是一次性请求,发起访问并完成后连续即断开,之前在网站上实施的用户行为不会被记录下来。
  • 如果前后访问的网页没有联系(例如,先访问百度,后访问淘宝),这种不会记录用户行为的特性不会造成什么问题。但是,如果前后访问的网页有联系,这种特性就会导致一些问题。下面以淘宝网为例进行讲解。
  • 先打开商品详情页面(第一个网页),选中一个商品并加入购物车,如下图所示。
    在这里插入图片描述
  • 然后打开购物车页面(第二个网页),准备进行结算。此时如果是处于无状态协议下,那么由于第二个网页不会记住用户在第一个网页中的操作,购物车内便不会有用户在一个网页中选择的商品。
  • 为了解决HTTP的无状态性带来的问题,需要借助其他手段,其中就包括将在1.1.3节讲解的Cookie。至于为什么HTTP要设计为无状态形式,感兴趣的读者可以自行查阅其他资料,这里将学习的重点放在如何通过Cookie进行用户识别或者说自动登录上。

1.1.3 Cookie的含义与作用

  • 在讲解Cookie的知识之前,先来解释一下如何解决1.1.2节的HTTP的无状态性带来的问题。熟悉淘宝购物的读者都知道,其实在商品加入购物车之前,会弹出如下图所示的登录页面。
    在这里插入图片描述
  • 输入账号和密码并登录之后,就相当于在网站有了一个身份信息,此时无论用户如何在网站中切换页面,用户的每次操作都会被记录在该身份下,HTTP的无状态性不会影响网站记录用户的行为。例如,淘宝会根据这个账号知道消费者在商品A的页面将商品A添加到了购物车。
  • 在实际的网页信息传输过程中,当用户输入账号和密码并登录之后,每次访问该网站的相关网页时,浏览器发送的请求信息里都会携带身份信息,作为网站记录用户行为的依据。这个身份信息就成为Cookie。以淘宝网的购物车页面为例:打开开发者工具,(1)切换至“Application”选项卡,(2)在左侧展开“Cookies”选项组,(3)在组中单击当前网页的网址,(4)即可在右侧看到相关的Cookie内容,如下图所示。

在这里插入图片描述

  • Cookie的内容很多,这里简单了解3列内容即可:Name,指Cookie的名称;Value,指Cookie的值;Expire/Max-Age,指Cookie的过期时间,即有效时间。比如下图是笔者的淘客账号,过期时间是Session(其概念在1.1.4节讲解),意思是如果Session过期,那么Cookie也会过程,例如,将Session设置为30分钟过期,那么若30分钟内没有任何操作,则Cookie也会过期,若30分钟内有操作,则会在最后一次操作的结尾重新计时30分钟。
    在这里插入图片描述
  • 对于整个网站而言,身份信息的过期时间要根据所有Cookie的过期时间的最近值来判断。对于淘宝而言,通常30分钟内没有任何操作(Session的常见过期时间设置)就会自动退出登录状态,即Cookie过期。

补充知识点:Cookie 的其他查看方式

  • 这里再介绍另一种查看Cookie的方式,以方便大家理解什么是“每次请求都携带Cookie信息”。如下图所示,打开淘宝网后进行登录,在淘宝网的任一页面打开开发者工具,依次点击(1)~(5),可以看到其中的Cookie内容。
    在这里插入图片描述
  • 这里的Cookie内容为“t=764379489de992448bbc7be9c30011cf…”,其实就是对之前看到的分列内容显示的Name(名称),Value(值)等Cookie内容进行的拼接。Request Headers是“请求头”的意思,也就是用户作为客户端访问网站所携带的信息。可以看到登录淘宝网后,每次访问淘宝网的网页都会携带这样的Cookie内容,用于表明笔者的用户身份。
  • 此外,在上图“Headers”选项卡右侧的“Cookies”选项卡下也可以看到和之前类似的分列显示的Cookie内容,如下图所示。
    在这里插入图片描述

1.1.4 Session 的含义与作用

  • 1.1.3节接触到了Session的概念。Session其实也是一种验证用户信息的方法,它与Cookie的区别在于:Cookie是将身份信息存储在客户端,即用户计算机的浏览器;而Session则是将身份信息存储在服务端,如淘宝的服务器。

补充知识点:Cookie将身份信息存储在本地浏览器的验证方法

  • 如下图所示,(3)在弹出的界面中可看到有一项浏览器数据为“Cookie及其他网站数据”,对应的操作提示为“会致使您从大多数网站退出。但您的Google账号…”。这里的“会致使您成功大多数网站退出”就是如果清除了浏览器中存储的Cookie信息,那么其他网站(如淘宝网)的身份信息都会被清除。这也从侧面验证了Cookie是将身份存储在本地浏览器。

在这里插入图片描述

  • Session在计算机中被称为会话控制,可用来存储当前用户连接的一些属性、状态和配置信息。当用户进行网页跳转之后,存储在Session中的信息不会丢失,并且会在这个用户的整个会话中存在下去。这个会话指的是客户端与服务器的一对一交互,是用户请求登录的自动创建。当会话过期或被放弃后,服务端也会终止这个会话。
  • 既然Session和Cookie存储的都是用户的身份信息和操作行为,那么为什么有了Cookie还需要Session呢?或者换一种问法,为什么不能将所有信息都存储在客户端的Cookie里,而需要将某些内容存储在服务端的Session里呢?
  • 一个重要的原因是为了保障用户的隐私安全。前面验证了Cookie是存储在本地浏览器中的,而个人计算机的安全性相对较低,如果将用户的所有信息都存储在Cookie中,那么一旦Cookie被窃取,就意味着用户的所有信息都泄露了。
  • 例如,一个淘宝网用户通常希望自己的购物信息是保密的,如果将所有购物信息都存储在Cookie中,那么一旦Cookie被窃取,便可能为该用户带来较大的损失。在1.1.3节中查看淘宝网的Cookie时,我们可以轻易地看到账号,却很难看到密码,因为密码这种安全性要求较高的隐私信息就是存储在服务端的Session中的。又如,一位股民有一些自己摸索出来的炒股秘诀,那么在登录股票账号之后,他肯定不想让别人知道自己买卖的股票种类和数量,此时将信息存储在服务端而非客户端才是明智的选择。
  • 另一个原因是Cookie会跟随客户端的请求(Request Headers)发送给服务端(参见1.1.3节的“补充知识点”),如果将信息全部存储在Cookie中,那么容易导致请求携带的内容过多,降低网络传输的速度。
  • 以上简单介绍了Session的概念及其与Cookie的区别,1.1.5节将进一步探讨Cookie与Session的交互。

1.1.5 Cookie与Session 的交互

  • 本节将通过讲解Cookie和Session的具体工作机制,帮助读者理解Session 和 Cookie的交互。
  • 首先来了解Cookie的工作机制。如下图所示,在客户端发送请求(如输入账号和密码进行登录)后,服务端会生成一个记录用户信息的Cookie,并将其颁发给客户端,由客户端保存,之后客户端每次访问服务端时都会携带该Cookie,从而进行身份识别。

在这里插入图片描述

  • 可能有的读者不太理解上图中的第2个步骤“服务端响应并颁发Cookie”,下面利用开发者工具进行验证。在谷歌浏览器中打开淘宝或天猫的登录页面。登录成功后会进入之前访问的页面。在"Network"下面的“response headers”中可以看到“set-cookie”内容。这就是“设置Cookie”,就是之前说的“服务器响应并颁发Cookie”。
    在这里插入图片描述
  • 了解完Cookie的工作机制,接着来了解Session的工作机制。如下图所示,首先客户端向服务器发送访问请求(如输入账号和密码进行登录);服务器获得用户的ID、头像、密码、等级等信息后,会生成一个Session 将这些信息存储起来,同时根据这些信息生成一个Session ID(这其实就是一种加密过程),并将Session ID添加至即将颁发给客户端的Cookie中;之后客户端会携带该Cookie访问服务端,此时的Cookie包含了服务端生成的Session ID;服务端接收到访问请求后,会通过Cookie中的Session ID来识别用户,并返回相应的数据。
    在这里插入图片描述
  • 在Session 出现之前,网页中基本上只使用Cookie存储用户信息,而随后出现的Session则能很好地和Cookie形成互补。
  • 下面以“访问淘宝并将商品加入购物车”的过程为例,分析Cookie和Session的工作机制,以帮助读者加深理解:
  • (1)用户在浏览器(客户端)中访问淘宝网址,然后输入账号和密码进行登录。
  • (2)淘宝的服务器(服务端)接收访问请求后生成一个新的Cookie和一个新的Session,将获得的用户ID、头像、密码等信息存储在Session中,同时生成一个Session ID,并把这个Session ID添加到升恒的Cookie中返回给客户端。
  • (3)客户端(浏览器)接收到服务器返回的响应后会将其中的Cookie(里面带有Session ID)保存起来,之后每次访问淘宝相关网址或请求数据,都会带上这个Cookie。例如,用户将要购买的一件商品加入购物车,浏览器便会将该商品的信息和Cookie一起发送给服务端。
  • (4)服务端(淘宝的服务器)接收到将商品加入购物车的请求后,从请求携带的Cookie中获取Session ID,接着到之前创建的Session 中查看,发现之前已经登录过了,便在该Session中记录要购买的商品。
  • (5)用户将所有要购买的商品加入购物车后,想确认所选商品并进行结算,便请求查看购物车。服务端(淘宝的服务器)在接收到查看购物车的请求后,会根据Cookie中的Session ID在Session中查看购物车中的所有商品,并返回给客户端(浏览器)。
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值