Session
简介
- Session对象是Javax.servlet.http.HttpSession实例对象,不存在父接口,是一个纯粹的接口,session本身就属于Http协议范畴(request,reponse是有父接口的)
- 对于服务器而言,每一个连接到它的客户端都是一个session,servlet容器使用此窗口创建http客户端和http服务器之间的会话。
- 会话保留一个时间段,(可以接收多个 请求)
- session一次会话,客户端、服务端都能感受到。
- 但是若重新开一个浏览器,则无法获得之前的session,每一个session都保存在当前浏览器中,所以session底层是依赖 Cookie的,默认只在当前浏览器中有效。
如何获取Session
- 1:获取Session对象(获取ssesssion 或者 创建session)
-
req.getSession();
- 表示,当session对象存在时,获取对象,不存在时,表示创建对象
- session表示一次会话,会话中可以保留时间段
package Servlet_demo; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; /** * Session对象 * * 1:获取Session对象(获取ssesssion 或者 创建session) * req.getSession(); * * 2: 常用方法 */ @WebServlet("/ser08") public class Servlet08 extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { HttpSession session = req.getSession(); //获取会话标识符 System.out.println(session.getId()); //获取会话开始时间 System.out.println("session 开始时间"+session.getCreationTime()); //获取结束时间 System.out.println("session 结束时间"+session.getLastAccessedTime()); // 是否是新的会话(新的session对象) System.out.println("是否是新的对象"+session.isNew()); } }
-
- false 是因为 默认打开了index.jsp 此时已创建好session,再跳转到对应页面输出时,已经不是第一次了,所以false
Session 标识符
- session 是为了标识一次会话,此次会话应该有一个唯一的标志,就是sessionID
- 当有请求到达服务器时,若用到session,服务器会查看是否从客户端传回一个名为JSESSIONID的cookie(浏览器cookie’中含有JSESSIONID),没有,则会创建一个新的对象;没有JSESSIONID的cookie则认为是新的一个会话,并把新的session传回给浏览器(客户端)。
- 所以session对象底层依赖cookie
Session域对象
- Session 表示一次会话,一次会话中数据是可以共享的,通过setAtrribute(name,value)向域对象中存数据,通过getAtrribute(name)从域对象中获取数据,remove(name)从域对象中移除数据
- 对比
request 作用域 session作用域 只在一次请求中有效 在一次会话中有效,包含多次请求 只在请求转发(一次跳转)有效 在请求转发与重定向跳转(重定向是两次请求转发)都有效
Session对象的销毁
- 默认时间销毁,30分钟
- 修改默认时间方法:在tomcat 中conf目录下web.xml 进行修改
<!-- You can set the default session timeout (in minutes) for all newly --> <!-- created sessions by modifying the value below. --> <session-config> <session-timeout>30</session-timeout> </session-config> ```
- 自己设定到期时间(设定最大不活动时间 单位秒)
- 程序中设定,session.setMaxInactiveInterval(15)// 15秒
- 关闭浏览器(session底层依赖cookie,cookie关闭浏览器失效)
- 关闭服务器(服务器关闭,session销毁)
- 手动销毁(session.invalidate()直接销毁)