Session概述
Session是服务器为每个访问这个服务器的客户端用户创建的一个容器。这个容器中存储的数据能够在多个request之间实现共享。而且,这个容器只属于当前这个用户,有一个唯一的id。
- Session技术就是在服务端存取会话的数据
- session的特点
- 每个session有id,存取key-value
- 数据有存活时间
- 每个Session的JESSIONID不同,使每个浏览器访问自己的数据不受他人影响
session图解
Session存取数据
- 获取Session
HttpSession request.getSession() 获取session对象,有session对象就返回创建的session,没有session就创建session对象 - 存数据
setAttribute(key,value) - 读数据
getAttribute(key) - 或缺session的id
- String session.getId()
session的销毁
- 时间超出了session的存活时间自动销毁
session的默认存活时间是30分钟,可以通过在tomcat的全局配置文件web.xml中(tomcat/config/web.xml)中设置session的存活时间(单位/分钟)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
<!--将session的存活时间设置成1小时(60分钟)-->
<session-config>
<session-timeout>60</session-timeout>
</session-config>
</web-app>
- 在servlet中调用**session.invalidate()**方法来销毁session
session持久化
当浏览器关闭后,JSESSIONID就消失了,再次访问的时候又会重新创建了一个新的session对象。这样操作会比较消耗资源,所以我们需要实现session的持久化,下次使用直接从浏览器获取以前的JSESSIONID,而不创建新的session。
浏览器关闭后JESSIONID这个cookie消失了。再次访问的时候,就不能够在识别这个session了。
session的持久化的方法:
- 通过将session的JSESSIONID保存到cookie中,设置存活期,下次访问直接带给服务器。
就是能够在较长的时间内,能够通过JSESSIONID识别session,下次再访问就不用创建session,通过将JSESSIONID保存到cookie中,社遏制存活日期,下次访问的时候,直接将cookie带给服务器,获取JSESSIONID,得到session对象。
案例实现:
WebServlet("/JSESSIONID_Cookie")
public class JSESSIONID_CookieServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//实现持久化session
HttpSession session = request.getSession();
//获取sessionid
String id = session.getId();
//这里注意,这个key一定要是JSESSIONID
Cookie cookie = new Cookie("JSESSIONID",id);
//设置cookie存活时间,将JSESSIONID存入cookie
cookie.setMaxAge(60*30);
//响应回浏览器
response.addCookie(cookie);
}
}
- tomcat 中关闭服务会自动把session持久化 (存储在work目录下的一个session.ser),下次访问服务器直接从这个文件读取
Session的钝化与活化(tomcat持久化session)
- 钝化:tomcat 中正常关闭服务会自动把session持久化(保存在tomcat文件夹的work目录下的serssion.ser文件)
- 活化:与钝化相反,再次启动tomcat服务器的时候会将保存的session读取给服务器。
work目录在idea发布的Using CATALINA_BASE的路径下: