session概述 - 【cookie和session篇】

Session概述

    Session是服务器为每个访问这个服务器的客户端用户创建的一个容器。这个容器中存储的数据能够在多个request之间实现共享。而且,这个容器只属于当前这个用户,有一个唯一的id。

  • Session技术就是在服务端存取会话的数据
  • session的特点
  1. 每个session有id,存取key-value
  2. 数据有存活时间
  3. 每个Session的JESSIONID不同,使每个浏览器访问自己的数据不受他人影响

session图解在这里插入图片描述

Session存取数据

  • 获取Session
        HttpSession request.getSession() 获取session对象,有session对象就返回创建的session,没有session就创建session对象
  • 存数据
        setAttribute(key,value)
  • 读数据
        getAttribute(key)
  • 或缺session的id
  • String session.getId()

session的销毁

  1. 时间超出了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>
  1. 在servlet中调用**session.invalidate()**方法来销毁session

session持久化

    当浏览器关闭后,JSESSIONID就消失了,再次访问的时候又会重新创建了一个新的session对象。这样操作会比较消耗资源,所以我们需要实现session的持久化,下次使用直接从浏览器获取以前的JSESSIONID,而不创建新的session。

    浏览器关闭后JESSIONID这个cookie消失了。再次访问的时候,就不能够在识别这个session了。

session的持久化的方法:

  1. 通过将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);
    }
}
  1. tomcat 中关闭服务会自动把session持久化 (存储在work目录下的一个session.ser),下次访问服务器直接从这个文件读取

Session的钝化与活化(tomcat持久化session)

  • 钝化:tomcat 中正常关闭服务会自动把session持久化(保存在tomcat文件夹的work目录下的serssion.ser文件)
  • 活化:与钝化相反,再次启动tomcat服务器的时候会将保存的session读取给服务器。
    在这里插入图片描述
    work目录在idea发布的Using CATALINA_BASE的路径下:
    在这里插入图片描述
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页