形象地理解Cookie和Session

摘要:
Cookie和Session的形象理解通过实际生活中的银行卡来理解Cookie和Session间的关系:Cookie相当于银行卡Session相当于银行账户结合到银行存钱和取钱的过程来理解:存钱过程1.兴高采烈地到银行柜台,把要存的钱交给银行工作人员;2.银行工作人员把钱存好后,给你一张银行卡。为什么要使用Cookie和Session呢因为HTTP请求是一种无状态协议,就是说,Clinet和Server之间在完成一次请求后,两者之间就没有关系了。如果Server想识别Client,就必须通过Cookie和Session配合来记录数据,比如加入购物车。

Cookie和Session的形象理解

通过实际生活中的银行卡来理解Cookie和Session间的关系:

  • Cookie相当于银行卡
  • Session相当于银行账户

结合到银行存钱和取钱的过程来理解:

存钱过程

1. 兴高采烈地到银行柜台,把要存的钱交给银行工作人员;
2. 银行工作人员把钱存好后,给你一张银行卡。

取钱过程

1. 需要用钱了,找到最近的ATM机,插入银行卡,输入密码;
2. ATM机验证密码正确后,就可以取出钱啦!

类比存钱的过程,client(你)的请求到达server(银行)后,server(银行)新建了一个Session(银行账户),并把Session(银行账户)的ID(银行卡号)放到Cookie(银行卡)中返给了浏览器;

类比取钱的过程,client(你)再次发送请求时,浏览器会自动把Cookie(银行卡)一起发送给server(银行或ATM机),server(银行或ATM机)根据Cookie(银行卡)中的ID(银行卡号)找到Session(银行账户),然后进行其它操作。

我们再来看在天猫网站购物的过程

1. 在浏览器中输入天猫的网址,然后回车(什么,不知道怎么天猫的网址?我不会告诉你,我每次也是百度一下才知道的);
2. 天猫的服务器在接收到请求后,在返回给你网页内容的同时,新建一个session,然后把session的ID放到cookie中返回;
3. 浏览器收到响应后,渲染网页的页面展示商品,同时发现有cookie,就保存一份cookie;
4. 选到自己喜欢的商品后,点击加入购物车,浏览器就会将选择的商品和cookie一起发给天猫的服务器;
5. 天猫的服务器收到你加入购物车的请求后,拿到传过来的cookie中的ID,到session中一查,原来你已经来过了,就直接在session中记录你要购买的商品;
6. 选购完所有的商品后,你想看下自己买全没有,就查看购物车;天猫服务器在接收到查看购物车请求后,根据cookie中的ID,在session中查询到你加到购物车里面的所有商品,返回给你。

为什么要使用Cookie和Session呢

因为HTTP请求是一种无状态协议,就是说,Clinet和Server之间在完成一次请求后,两者之间就没有关系了。当Client再次请求Server时,Server不会识别这个Client。通俗点说就是,Server把每个HTTP请求都当做一次新的请求。如果Server想识别Client,就必须通过Cookie和Session配合来记录数据,比如加入购物车。

免责声明:文章转载自《形象地理解Cookie和Session》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Swagger2常用注解及其说明 (转)eclipse实现热部署和热加载下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Java—SSH(MVC)

Java—SSH(MVC) 1. 谈谈你mvc的理解 MVC是Model—View—Controler的简称。即模型—视图—控制器。MVC是一种设计模式,它强制性的把应用程序 的输入、处理和输出分开。 MVC中的模型、视图、控制器它们分别担负着不同的任务。 视图: 视图是用户看到并与之交互的界面。视图向用户显示相关的数据,并接受用户的输入。视图不进行任何...

Flask入门之SQLAlchemy数据库连接操作(第15讲)

一、库安装 Flask-SQLAlchemy 2 SQLAlchemy 1.0.8 二、进入venv 三、切换到项目Sample 文件夹,进入manager.py 的shell python manager.py shell 四、创建data.sqlite数据库 from app import db from app import mod...

ASP.NET System.Web.HttpContext类Current属性 的运用收藏

1、.Net的HTTP请求.NET与ASP的运行机制有很大不同.ASP的请求与响应是,ASP页面被请求,然后逐行解释.是基于过程的.最多是包含了文件,需要先引入文件罢了.而.Net,在页面被请求后,首先是加载HTTP Module,这不是本文的重点.然后再加载HTTP Handler.这也不是本文的重点.加载的这两项,都需要在Webconfig文件中配置....

Android数据库相关整理

今天对Android中数据库相关的操作和代码做了一个整理,便于自己之后的查阅。主要内容有: 1.原生数据库写法 2.终端进sqlite的操作 3.第三方库 4.事务处理 5.权限和路径 一、原生数据库写法一般要先继承自SQLiteOpenHelper写一个Helper。 public class DatabaseHelper extends SQLiteO...

JSTL 标签库详细介绍资料

前言从jsp 1.1规范开始,jsp就支持在jsp中使用自定义标签了,自定义标签的广泛使用造成了程序员重复定义,这样就促成了jstl(javaserver pages standard tag library)的诞生。因为工作中需要用到jstl,但网上却苦于找不到有关jstl的中文资料,所以就有了这篇文章。jstl简介jstl是一个不断完善的开放源代码的j...

在ASP.NET项目中使用XPO的最佳准则

学习XPO有一段时间了,也用它陆续做过几个项目。遇到过问题走过弯路,这里把DevExpress知识库的几篇文章的内容做了摘录和整理,并且加上了一些自己的注释,方便自己日后备忘也方便其他的朋友。 1. Always define a constructor with a Session parameter in your persistent objec...