Session与Cookie的概念原理

前言:

本文没有任何代码,内容全部都是概念与运行原理,在使用一个技术前一定要弄清他的本质,下面会讲Session、Cookie、ServletContext的概念与他们的联系区别

 

Session概念

 

1.Session是什么?

服务器开辟了一块空间专门存放Session,这个空间叫做Session池,Session池中可以存放多个Session,每个Session对应一个客户端(浏览器),比如你打开360浏览器与IE浏览器这就是2个客户端,此时在Session池中会存在360浏览器对应的Session与IE浏览器对应的Session,而每个客户端都会去找自己对应的Session。

 

2.Session能做什么?

上面说了Session是什么,但是它能做什么,Session主要做的事情就是存储资源(数据),因此,在需要保存用户数据时,服务器程序可以把用户数据写到用户客户端(浏览器)对应的session中,当用户使用客户端(浏览器)访问服务器程序时,客户端(浏览器)对应的session中取出该用户的数据。

 

 

3.Session的获取流程原理图:

 Session与Cookie的概念原理

 

1.服务器中会有个专门储存Seesion的空间Seesion池

2.用户打开了一个浏览器发送请求访问项目

3.请求的时候,服务器会根据你这个客户端(浏览器)创建对应的Seesion在Session池中

 

从上图可以很明显的看出,获取Session不会受Servlet(服务连接器)影响,只会受客户端影响,Session与客户端是一对一的关系,你360浏览器的Session1数据你通过火狐浏览器肯定是取不到,火狐取的是自己对应的Session2,说到这里另一个问题出现了,服务器是怎么把客户端(浏览器)与Seesion对应起来的呢?在回答这个问题前先了解下Cookie吧

 

Cookie概念

 

1.Cookie是什么?

Cookie是客户端(浏览器)上储存数据的文件,是存放在客户端(浏览器)里面的。

 

2.Cookie能做什么?

存储数据,与Session不同的是,Session是存放在服务器上,Cookie是在存放在客户端,

每次客户端(浏览器)发送请求的时候,会把客户端(浏览器)里面所有的Cookiec都发送到服务器去,服务器响应回来的时候会把数据储存到Cookiec发送给客户端(浏览器),其中里面会储存SessionId,从而进行 session 跟踪,把客户端与Seesion关联起来

 

3.Cookie的流程原理图

 Session与Cookie的概念原理

 

1.客户端(浏览器)发送请求时会把客户端里面所有的Cookie全部传到服务器

2.服务器接收到请求后,服务器响应客户端(浏览器),会把数据储存到Cookiec发送给客户端(浏览器),其中里面会储存SessionId

3.客户端(浏览器)接收到后又储存起来

4.每个客户端(浏览器)都会有属于自己的Cookie。

注:Cookie的生命周期默认是浏览器会话期间,浏览器关闭后,Cookie清空,除非你手动设置Cookie生命周期时间

 

 

Session与Cookie的联系、区别

 

Session与Cookie合并运行原理图:

 Session与Cookie的概念原理

 

1.首先客户端(浏览器)发送请求到服务器

2.请求里面会把客户端(浏览器)所有的Cookie带上

3.服务器接收到请求

4.内部开始处理,首先从客户端(浏览器)带过来的Cookie里面获取SessionID

5.拿SessionID去Session池中查询

6.如果没有查询到对应的Session或SessionID是空,重新新建一个Session到Session池中

7.如果查询到了直接获取对应Session

8.把数据存入客户端(浏览器)带过来的Cookie,其中就有SessionID,响应给客户端(浏览器)

9.客户端得到响应并把Cookie储存起来

10.接着从1-9循环

 

Session与Cookie的联系区别:

联系:客户端获取Session需要通过Cookie里面的SessionId,Cookie就是客户端与Session的中间桥梁。

区别:同样是存储数据,但是一个是服务器端,另一个是在客户端

 

 

ServletContext概念

 

ServletContext是什么?

ServletContextWeb容器给每个应用程序创建的一个公共空间,每个应用程序都会对应一个ServletContext上下文(公共空间),他的公共范围在对应的应用程序之内。

 

ServletContext能干什么?

存储数据、提供一些Web容器的功能。

 

 

ServletContext与Session的区别:

ServletContextSession都可以存储数据,但是他们最大的区别则是范围区别,Session的访问范围受限客户端而ServletContext的访问范围受限应用程序。

举个例子:

360浏览器访问项目往ServletContextSession分别存储了number : 1( 键值对应),在360浏览器中ServletContextSession通过keynumber获取到value值1。

打开火狐浏览器,用ServletContext通过keynumber获取到value值1,用Session通过keynumber获取到null。