Session的一些重要特点

1. 当客户端关闭时,在服务器关闭、前后,获取session是否为同一个?

1.1 默认情况下,不是同一个session。
①。在cn.itcast.session包下创建SessionDemo3文件

package cn.itcast.session;

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;

@WebServlet("/SessionDemo3")
public class SessionDemo3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取session
        HttpSession session = request.getSession();
        System.out.println(session);

    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

②。在浏览器地址栏中输入http://localhost:8080/CookieDemo01/SessionDemo3,idea控制台打印输出为一下结果:
在这里插入图片描述
③。当关闭浏览器后,在重新打开浏览器,再次访问http://localhost:8080/CookieDemo01/SessionDemo3,那么idea控制台输出的值就会和上次有所不同。
在这里插入图片描述

1.2 如果需要相同,则可以创建Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化保存。

package cn.itcast.session;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.*;
import java.io.IOException;

@WebServlet("/SessionDemo3")
public class SessionDemo3 extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1.获取session
        HttpSession session = request.getSession();
        System.out.println(session);

        //期望客户端关闭后,session也能相同
        Cookie c = new Cookie("JSESSIONID",session.getId());
        c.setMaxAge(60 * 60);
        response.addCookie(c);

    }
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doPost(request, response);
    }
}

在浏览器地址栏中输入http://localhost:8080/CookieDemo01/SessionDemo3,idea控制台打印输出的结果和当关闭浏览器后,在重新打开浏览器,再次访问,idea控制台输出的值和上次一样。
在这里插入图片描述

2. 客户端不关闭,在服务器关闭后,两次获取的session是同一个吗?

不是同一个
(1)Session的钝化:在服务器正常关闭之前,将session对象序列化到硬盘上。
(2)Session的活化:在服务器启动后,将session文件转化为内存中的session对象即可。

2.1 tomcat自动的把session的钝化和活化做了。

①。将idea之前部署的文件,IdeaProjects->Cookie_demo01->out->artifacts->web_war_exploded,将web_war_exploded文件里面的内容打包为war包。
②。将war包直接粘贴到tomcat的webapps文件里面。
在这里插入图片描述
③。打开apache-tomcat-9.0.34\bin目录下的startup.bat开启本地tomcat服务器。此时再打开apache-tomcat-9.0.34\webapps,其文件里面已经部署完成。
在这里插入图片描述
在这里插入图片描述
在浏览器中访问http://localhost:8080/web/SessionDemo1,然后再访问http://localhost:8080/web/SessionDemo2,因此tomcat日志里面就会打印输出hello session
在这里插入图片描述④。打开apache-tomcat-9.0.34\bin目录下的shutdown.bat关闭本地tomcat服务器。那么session被序列化的文件会放到apache-tomcat-9.0.34\work\Catalina\localhost\web文件里面。
⑤。再次在浏览器中访问,还是可以访问到hello session。
2.2 idea虽然能钝化,但是活化的操作不会成功。
①。启动服务器,我们可以在控制台找到配置的路径
在这里插入图片描述
②。在浏览器中访问http://localhost:8080/CookieDemo01/SessionDemo1,然后正常关闭掉服务器,那么C:\Users\user.IntelliJIdea2019.2\system\tomcat\Tomcat_9_0_34_Cookie_demo01\work\Catalina\localhost\CookieDemo01文件里面就会出现SESSIONS.ser文件
在这里插入图片描述
③。当再次用idea启动服务器的过程中,C:\Users\user.IntelliJIdea2019.2\system\tomcat\Tomcat_9_0_34_Cookie_demo01目录下的work文件会自动删除,然后自动创建。但是新创建的work目录没有对应的SESSIONS.ser文件,所以并获取不到session之前的数据
在这里插入图片描述

3. session什么时候被销毁?

  1. 服务器关闭。
  2. session对象调用invalidate()。
  3. session默认失效时间:30分钟。
    可以在apache-tomcat-8.5.54\conf目录下找到web.xml文件。打开web.xml文件,找到session-config标签,这里指的是session的失效时间为30分钟,可以自己根据需要进行修改。
<session-config>
    <session-timeout>30</session-timeout>
</session-config>

4. session的特点

  1. session用于存储一次会话的多次请求,存在服务端。
  2. session可以存储任意类型,任意大小的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值