Summary
- 各自是什么
- session
客户端和服务器之间的会话。多个session对象都存储在server的内存中。 - sessionId
session对象的标识符。
server用sessionId来区分内存中多个不同的session对象。
每个客户端要知道自己是谁,叫啥名字(就是这个sessionId) - cookie
客户端的备忘录,存储一些键值对。其中包括存储sessionId的键值对。 - JSESSIONID
传输sessionId的值时,得起个名字,然后传输JSESSIONID=xxx
。也可以叫hellosessionId,传输hellosessionId=xxx
。
- 用一段话阐述关系:
session
是存储在服务器内存中的,与客户端<-->服务器
这种关系一一对应的对象。
每个session对象有一个唯一的标识符(即sessionId
),以做区分。
而Cookie
是在客户端存储一些键值对的文本/容器。这个容器中存啥都行,开发人员说了算。
其中一个键值对:JSESSIONID=xxxxxx
,其中的键
就是JSESSIONID
(这个名字叫啥由web服务器的开发者说了算)。
Intro
下面按照从服务端管理到客户端配合管理的方向,按流程进行叙述。
-
session
会话。会话是客户端和服务器之间的一次对话
。
客户端A对server说:给我个index.jsp(或其他的东西),会话开始。中间各种操作。
然后A一直不说话,等了30分钟,这个会话就会死(这个30分钟的session-timeout可以在web.xml中配置)
或者是A在说话,但是后端代码里执行session.invalidate()
,这个会话也会死。
会话存储在server端(所以有时会说:太多的会话对象会给server造成负担)。
比方说:有10个客户端都在和Server交流,对每个客户端来说,都只和一个人说话。
但是对server来说:我可是同时在和10个人说话啊。。。
所以在server端会保存10个session对象。每个session对象里会有多个属性attribnute
,存储server和对应的客户端的一些小秘密(key-value
对存储)。
很想画个图,不太方便。略过。。。server端的这10个session对象,每个对应1个客户端。
那server就想了,我怎么区分一下我这里的10个session对象呢,不然等会万一有1000个session怎么办呢。
对了,搞个ID吧/我给每个Session对象贴一个(唯一的)标识符。
这个ID,就是sessionId
-
sessionId
sessionId在server这边,是为了区分多个不同的session。
而每个客户端也需要搞清楚自己的定位,自己发请求的时候,要知道自己是谁,并且告诉server自己是谁(自己的ID)
新人怎么办呢,只要你发请求的时候不说清楚:你的ID是多少。那我一律按照萌新处理。
对于第一次过来的萌新,我会给你起个名字(定一个唯一的标识符)。并在响应的时候把这个标识符。
以后你们这些知道自己名字的客户端,和我聊天请顺便说名字(不说的都按萌新处理)。我们说,server运行期间,是在内存中实例化好多session对象的。sessionId就标在session对象额头上,以区分多个session。
而每个客户端也要知道自己的sessionId。
但问题是,客户端的sesionId怎么保存/记忆?
这就有了客户端的cookie
。 -
cookie
cookie,是客户端存储的小段文本信息。
毕竟,客户端也是有需求的,也需要存储一些键值对
的数据(比如sessionId=wuyujin1997)。
cookie中也可以存储其他东西,比如客户端A的用户密码,比如其他。这一份cookie中存储了多个键值对/名值对。
我想问一个核心的:那个sessionId的值,叫什么名字?JSESSIONID
就是tomcat传输sessionId时,起的名字。 -
JSESSIONID
Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的容器也许就不叫jsessionid了。