java session创建时间_java服务器何时创建Session

Session 机制:

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

这个标识称为session id, 如果已包含一个session id则说明以前已经为此客户端创建过session, 服务器就按照session id把这个session检索出来使用, 若没有创建过,则创建一个新的Session。 那么这个session是什么时候创建的呢? 之前一直错误地理解为: 当用户向服务器发起请求时,这个session便会立刻建立起来, 但实际上却根本不是这样。

在Servlet中,你肯定用过下面这句话,

HttpSession session = request.getSession();

如果当前没有session,则会立刻建立一个session; 如果有session则返回当前session。

这句话和

HttpSession session = request.getSession(true);

的效果是一样的。

但是如果你写成

HttpSession session = request.getSession(false);

则不会自动建立session。 若当前没有session,你所得到的seesion只会是一个null。

我们先来测试访问一个jsp页面 在servlet中我们写上

HttpSession session = request.getSession(false);

System.out.println(session==null);

这句话不会建立session,如果当前没有seesion建立的话,控制台输出应该是true的。

然后我们去访问页面。 第一次访问:输出false(servlet先于jsp被执行) 通过查看请求信息我们得到如下内容

响应头信息 原始头信息

Content-Length 824

Content-Type text/html;charset=ISO-8859-1

Date Thu, 05 Apr 2012 14:46:16 GMT

Server Apache-Coyote/1.1

Set-Cookie JSESSIONID=7397F04B2A96275E1FDD177DA62A2400; Path=/Test01/; HttpOnly

你肯定会有点好奇,明明没有在servlet做任何创建session的操作,然而实际上cookies里面已经有了一个JSESSIONID了。

第二次访问:输出true, 这表示session的确已经被建立了,所以会有JSESSIONID。

这是怎么回事呢?

原因: 默认的情况下,用户第一次访问jsp页面就会创建session, 因为jsp中指令session默认配置为true, 即

下面我简单解释下jsp的运行过程, jsp运行时,先会转换成一个java文件然后再编译成class文件,最后输出结果。 既然这样,我们就可以先查看下jsp生成的java文件 打开 %TOMCAT_HOME%\work\Catalina\localhost\ 然后打开所使用项目名称的文件夹,比如我的是: Test01\org\apache\jsp 这个jsp文件夹下面就是你对应的jsp生成的java文件代码了, 这个目录结构和你的WebRoot的jsp目录结构是一样的。 打开/test/test_jsp.java

里面有一句

session = pageContext.getSession();

因此当这个jsp页面执行时,这句话就会帮你创建session了。

OK,那我们现在试试,然后再去访问这个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中手动调用

HttpSession session = request.getSession();

或者

HttpSession session = request.getSession(true);

2:jsp中没有写 (默认情况下它是的)

如果两个条件同时都不满足,那么你建立的只是一个无seesion的连接。

转载网址:http://www.360doc.com/content/12/0511/12/1542811_210284774.shtml

Java 中,Session 是一种存储在服务器端的数据结构,用于存储用户在访问 Web 应用时的会话信息。在 Web 应用中,Session 经常用于保持用户登录状态、存储用户购物车信息、存储用户偏好设置等。 以下是创建和获取 Session 的步骤: 创建 Session: 1. 在 Servlet 中,调用 HttpServletRequest 的 getSession() 方法,即可获取当前用户的 Session 对象。如果当前用户没有 Session,则该方法会自动创建一个新的 Session。 HttpSession session = request.getSession(); 2. 如果需要设置 Session 的过期时间,可以调用 setMaxInactiveInterval() 方法。该方法接收一个以秒为单位的整数值,表示 Session 的最大空闲时间session.setMaxInactiveInterval(1800); // 设置 Session 的最大空闲时间为 30 分钟 3. 如果需要向 Session 中添加数据,可以使用 setAttribute() 方法。该方法接收两个参数,第一个参数是数据的键名,第二个参数是数据的值。 session.setAttribute("username", "张三"); // 向 Session 中添加一个名为 "username" 的键值对 获取 Session: 1. 在 Servlet 中,调用 HttpServletRequest 的 getSession() 方法,即可获取当前用户的 Session 对象。 HttpSession session = request.getSession(); 2. 如果需要获取 Session 中的数据,可以使用 getAttribute() 方法。该方法接收一个参数,表示要获取数据的键名。如果 Session 中不存在该键名,则返回 null。 String username = (String) session.getAttribute("username"); // 从 Session 中获取名为 "username" 的键对应的值 需要注意的是,Session 中存储的数据通常是敏感信息,因此需要采取一定的安全措施来保护 Session。例如,可以使用 HTTPS 协议来加密通信,使用 SSL/TLS 证书来验证服务器的身份,使用 Cookie 来保存 Session ID 等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值