session何时建立?并不是向服务器发送请求就立即建立。

时间:2024-05-21 07:55:08

首先了解一下session机制
session机制是一种服务器端的机制,
用来在无状态的HTTP协议下越过多个请求页面来维持状态和识别用户。
当程序需要为某个客户端的请求创建一个session的时候,
服务器首先检查这个客户端的请求里是否已包含了一个session标识。

这个标识称为session id,
如果已包含一个session id则说明以前已经为此客户端创建过session,
服务器就按照session id把这个session检索出来使用,
若没有创建过,则创建一个新的Session。

之前一直以为浏览器一请求服务器上的数据就会建立session,并返回一个JSESSIONID放到浏览器的cookie里,但是在学习过程中发现并不是这样,就做了一系列实验,实验如下:

首先我们对jsp页面发起请求
session何时建立?并不是向服务器发送请求就立即建立。
首次发送请求时会得到一个JSESSIONID,好像并没有什么问题。

接下来看对html文件发起请求
session何时建立?并不是向服务器发送请求就立即建立。
这时响应头并没有JSESSIONID,然后我们用ajax发起一个请求,在servlet中获取session并设置属性。
session何时建立?并不是向服务器发送请求就立即建立。
session何时建立?并不是向服务器发送请求就立即建立。
这是才会建立session,并返回JSESSIONID。

那这就说明Session只有在后台创建了session对象才会建立,并不是请求页面就会建立我们再做一个实验来证明。

请求jsp页面之所以会建立连接,是因为它在编译的时候已经生成了session对象,我们取jsp编译后的java文件中来看一看(E:\eclipseworkspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost\ 默认路径一般在workspace的这个目录下 。给大家推荐一个快速搜索文件的软件叫Everything)
session何时建立?并不是向服务器发送请求就立即建立。
这是初始化语句。
session何时建立?并不是向服务器发送请求就立即建立。
其中有一行代码是是session = pageContext.getSession();这里生成了session对象。这是因为在jsp页面的page指令中默认加上了 session="true"这句话,如果不写就为true。
session何时建立?并不是向服务器发送请求就立即建立。
如果改为false会怎么样呢?
这时我们来到改为false的myJSP.jsp页面编译后的java文件。
session何时建立?并不是向服务器发送请求就立即建立。
发现session对象不会被创建了。这时在对此页面发起请求。
session何时建立?并不是向服务器发送请求就立即建立。
发现响应头没有JSESSIONID。由此证明,session是在后台生成session对象时才会创建,并不是一发起请求就创建。

注:如果一旦建立session,再次发起请求就会沿用之前的sessionid,直到关闭浏览器,所以在必要的时候需要重新打开一下浏览器。

以上只是个人学习经验总结,若果有说的不对的地方,请大神指出。