Session 机制:
session机制是一种服务器端的机制, 用来在无状态的HTTP协议下越过多个请求页面来维持状态和识别用户。 当程序需要为某个客户端的请求创建一个session的时候, 服务器首先检查这个客户端的请求里是否已包含了一个session标识。
这个标识称为session id, 如果已包含一个session id则说明以前已经为此客户端创建过session, 服务器就按照session id把这个session检索出来使用, 若没有创建过,则创建一个新的Session。 先介绍一下测试环境:
![](https://img-blog.csdn.net/20170807175851663?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3hsMDkyMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
其中servlet和jsp都是默认内容。
测试1:分别请求servlet和jsp,通过浏览器查看是否生成session。
测试结果:请求servlet没有产生session,请求jsp产生了session。
理论知识:jsp的本质是servlet,只有在servlet中调用request.getSession();或者request.getSession(true);服务器才会产生session。如果调用request.getSession(false);将不会产生session。那么为什么jsp会产生session。
查找原因:
在eclipse项目所在的工作空间中,找到jsp的源码
![](https://img-blog.csdn.net/20170807180509359?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3hsMDkyMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
查看index.jsp源代码:
![](https://img-blog.csdn.net/20170807180641837?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3hsMDkyMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
可以看到在index.jsp的java代码中,自动获取了session。
先介绍一下测试环境:
![](https://img-blog.csdn.net/20170807175851663?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3hsMDkyMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
其中servlet和jsp都是默认内容。
测试1:分别请求servlet和jsp,通过浏览器查看是否生成session。
测试结果:请求servlet没有产生session,请求jsp产生了session。
理论知识:jsp的本质是servlet,只有在servlet中调用request.getSession();或者request.getSession(true);服务器才会产生session。如果调用request.getSession(false);将不会产生session。那么为什么jsp会产生session。
查找原因:
在eclipse项目所在的工作空间中,找到jsp的源码
![](https://img-blog.csdn.net/20170807180509359?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3hsMDkyMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
查看index.jsp源代码:
![](https://img-blog.csdn.net/20170807180641837?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY3hsMDkyMQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
可以看到在index.jsp的java代码中,自动获取了session。
因为jsp中指令session默认配置为true, 即
<%@ page session="true"%>
OK,那我们现在试试<%@ page session="false"%>,然后再去访问这个jsp页面。 当然你需要先关闭浏览器再打开,否则原来的session还在那里呢。
响应头信息 原始头信息
Content-Length 824
Content-Type text/html;charset=ISO-8859-1
Date Thu, 05 Apr 2012 14:47:38 GMT
Server Apache-Coyote/1.1
好了,这时我们发现那个JSESSIONID已经消失了,控制台输出的session==null结果也是true了。
总结: session不是一打开网站就会立刻建立。
它的建立需要基于下面两个条件中的任意一个:
1:在servlet中手动调用
request.getsession()
2 :jsp中没有写<%@ page session="false"%>
(默认情况下它是<%@ page session="true"%>的)
如果两个条件同时都不满足,那么你建立的只是一个无seesion的连接。
|