当前位置:首页 > 服务端 > 详解Cookie、Session和缓存

详解Cookie、Session和缓存

2022年11月09日 20:50:03服务端9

1 Cookie和Session

      Cookie和Session都为了用来保存状态信息,都是保存客户端状态的机制,它们都是为了解决HTTP无状态的问题而所做的努力。

      Session可以用Cookie来实现,也可以用URL回写的机制来实现。用Cookie来实现的Session可以认为是对Cookie更高级的应用。

1.1两者比较

Cookie和Session有以下明显的不同点:

      1)Cookie将状态保存在客户端,Session将状态保存在服务器端;

      2)Cookies是服务器在本地机器上存储的小段文本并随每一个请求发送至同一个服务器。Cookie最早在RFC2109中实现,后续RFC2965做了增强。网络服务器用HTTP头向客户端发送cookies,在客户终端,浏览器解析这些cookies并将它们保存为一个本地文件,它会自动将同一服务器的任何请求缚上这些cookies。Session并没有在HTTP的协议中定义;

      3)Session是针对每一个用户的,变量的值保存在服务器上,用一个sessionID来区分是哪个用户session变量,这个值是通过用户的浏览器在访问的时候返回给服务器,当客户禁用cookie时,这个值也可能设置为由get来返回给服务器;

      4)就安全性来说:当你访问一个使用session 的站点,同时在自己机子上建立一个cookie,建议在服务器端的SESSION机制更安全些.因为它不会任意读取客户存储的信息。

1.2 Session机制

      Session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构(也可能就是使用散列表)来保存信息。

当程序需要为某个客户端的请求创建一个session的时候,服务器首先检查这个客户端的请求里是否已包含了一个session标识 - 称为 session id,如果已包含一个session id则说明以前已经为此客户端创建过session,服务器就按照session id把这个 session检索出来使用(如果检索不到,可能会新建一个),如果客户端请求不包含session id,则为此客户端创建一个session并且生成一个与此session相关联的session id,session id的值应该是一个既不会重复,又不容易被找到规律以仿造的字符串,这个 session id将被在本次响应中返回给客户端保存。

1.2.1 Session的实现方式

使用Cookie来实现

      服务器给每个Session分配一个唯一的JSESSIONID,并通过Cookie发送给客户端。

当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIONID。这样服务器能够找到这个客户端对应的Session。

流程如下图所示:

详解Cookie、Session和缓存 _ JavaClub全栈架构师技术笔记

使用URL回显来实现

      URL回写是指服务器在发送给浏览器页面的所有链接中都携带JSESSIONID的参数,这样客户端点击任何一个链接都会把JSESSIONID带会服务器。

      如果直接在浏览器输入服务端资源的url来请求该资源,那么Session是匹配不到的。

      Tomcat对Session的实现,是一开始同时使用Cookie和URL回写机制,如果发现客户端支持Cookie,就继续使用Cookie,停止使用URL回写。如果发现Cookie被禁用,就一直使用URL回写。jsp开发处理到Session的时候,对页面中的链接记得使用response.encodeURL() 。

1.2.2 与Cookie相关的HTTP扩展头

      1)Cookie:客户端将服务器设置的Cookie返回到服务器;

      2)Set-Cookie:服务器向客户端设置Cookie;

      3)Cookie2 (RFC2965)):客户端指示服务器支持Cookie的版本;

      4)Set-Cookie2 (RFC2965):服务器向客户端设置Cookie。

1.2.3 Cookie的流程

      服务器在响应消息中用Set-Cookie头将Cookie的内容回送给客户端,客户端在新的请求中将相同的内容携带在Cookie头中发送给服务器。从而实现会话的保持。

流程如下图所示:

详解Cookie、Session和缓存 _ JavaClub全栈架构师技术笔记

2 缓存的实现原理

2.1 什么是Web缓存

WEB缓存(cache)位于Web服务器和客户端之间。

缓存会根据请求保存输出内容的副本,例如html页面,图片,文件,当下一个请求来到的时候:如果是相同的URL,缓存直接使用副本响应访问请求,而不是向源服务器再次发送请求。

HTTP协议定义了相关的消息头来使WEB缓存尽可能好的工作。

2.2缓存的优点

      减少相应延迟:因为请求从缓存服务器(离客户端更近)而不是源服务器被相应,这个过程耗时更少,让web服务器看上去相应更快。

      减少网络带宽消耗:当副本被重用时会减低客户端的带宽消耗;客户可以节省带宽费用,控制带宽的需求的增长并更易于管理。

2.3与缓存相关的HTTP扩展消息头

      Expires:指示响应内容过期的时间,格林威治时间GMT

      Cache-Control:更细致的控制缓存的内容

      Last-Modified:响应中资源最后一次修改的时间

      ETag:响应中资源的校验值,在服务器上某个时段是唯一标识的。

      Date:服务器的时间

      If-Modified-Since:客户端存取的该资源最后一次修改的时间,同Last-Modified。

      If-None-Match:客户端存取的该资源的检验值,同ETag。

2.4客户端缓存生效的常见流程

      服务器收到请求时,会在200OK中回送该资源的Last-Modified和ETag头,客户端将该资源保存在cache中,并记录这两个属性。当客户端需要发送相同的请求时,会在请求中携带If-Modified-Since和If-None-Match两个头。两个头的值分别是响应中Last-Modified和ETag头的值。服务器通过这两个头判断本地资源未发生变化,客户端不需要重新下载,返回304响应。常见流程如下图所示:

详解Cookie、Session和缓存 _ JavaClub全栈架构师技术笔记

2.5 Web缓存机制

      HTTP/1.1中缓存的目的是为了在很多情况下减少发送请求,同时在许多情况下可以不需要发送完整响应。前者减少了网络回路的数量;HTTP利用一个“过期(expiration)”机制来为此目的。后者减少了网络应用的带宽;HTTP用“验证(validation)”机制来为此目的。

HTTP定义了3种缓存机制:

      1)Freshness:允许一个回应消息可以在源服务器不被重新检查,并且可以由服务器和客户端来控制。例如,Expires回应头给了一个文档不可用的时间。Cache-Control中的max-age标识指明了缓存的最长时间;

      2)Validation:用来检查以一个缓存的回应是否仍然可用。例如,如果一个回应有一个Last-Modified回应头,缓存能够使用If-Modified-Since来判断是否已改变,以便判断根据情况发送请求;

      3)Invalidation: 在另一个请求通过缓存的时候,常常有一个副作用。例如,如果一个URL关联到一个缓存回应,但是其后跟着POST、PUT和DELETE的请求的话,缓存就会过期。

作者:laoluoits
来源链接:https://www.cnblogs.com/laoluoits/p/10855117.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/68971.html

标签: CookieSession
分享给朋友:

“详解Cookie、Session和缓存” 的相关文章

Error creating bean with name 'sqlSessionFactory' defined in class path resource [config/spring/applicationContext.xml]: Invocation of init method failed;

Error creating bean with name 'sqlSessionFactory' defined in class path resource [config/spring/applicationContext.xml]: Invocation of init method failed;

我报的错:   org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sqlSessionFactory' defined in class path res...

JUnit测试,异常BeanCreationException: Error creating bean with name 'sessionFactory'。Unable to get the default Bean Validation factory

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'departmentServiceImpl': Injection of resource fields fa...

cookie、session、token之间的关系

cookie、session、token之间的关系

 Cookie机制 由于HTTP是一种无状态协议,服务器没有办法单单从网络连接上面知道访问者的身份,为了解决这个问题,就诞生了Cookie。Cookie实际上是一小段的文本信息。Cookies是由服务器产生的。接下来我们描述一下Cookie产生的过程。浏览器第一次...

cookie和session的区别,分布式环境怎么保存用户状态

1、session保存在服务器,客户端不知道其中的信息;cookie保存在客户端,服务器能够知道其中的信息。 2、session中保存的是对象,cookie中保存的是字符串。 3、session不能区分路径,同一个用户在访问一个网站期间,所有的session在任何一个地方都可以访...

Servlet之cookie和session简介及其作用

Servlet之cookie和session简介及其作用

一、cookie和session简介 1.浏览器和服务器是多对一的关系 2.业务:登录时记录账号,后续的页面上显示此账号 3.使用如下对象存储账号都不行 request:多个请求之间共用账号,不能用request c...

JavaWeb Cookie客户端技术和Session服务端技术详解

JavaWeb Cookie客户端技术和Session服务端技术详解

目录 1.1  Cookie机制 1.1.1  什么是Cookie 1.1.2  记录用户访问次数 1.1.3  Cookie的不可跨域名性 1.1.4  Unicode编码:保存中文 1.1....

servlet中cookie和session操作

1.1 软件中的会话 一次会话: 打开浏览器 -> 访问一些服务器内容 -> 关闭浏览器   登录场景: 打开浏览器 -> 浏览到登陆页面 -> 输入用户名和密码 -> 访问到用户主页(显示用户名)...

简述 Cookie和Session的区别和优缺点

具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。 Cookie的优缺点: 优点:极高的扩展性和可用性 通过良好的编程,控制保存在cookie中的session对象的大小。 通过加密和安全传输技术(SSL),减少co...

php中session和cookie的使用及区别

1.cookie的使用 什么是 Cookie? cookie 常用于识别用户。cookie 是服务器留在用户计算机中的小文件。每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。...

Laravel无法使用COOKIE和SESSION的解决方法

Laravel无法使用COOKIE和SESSION的解决方法

COOKIE和SESSION的具体使用百度和官方文档上都有。 但是,文档里没有说明必须经过相应的中间件才能使用,百度搜索结果都是彼此copy的bullshit!!! 方法如图所示,对应的路由必须使用下列中间件,COOKIE和SESSION才生效。...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。