session

session是啥?
Session 是另一种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,而 Session 保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是 Session。客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了。
session_第1张图片

session_第2张图片

Session 的实现是依赖于 Cookie 的
在一次会话中,获取的 Session 对象是同一个

Session 用于存储一次会话的多次请求的数据,存储服务器端
Session 可以存储任意类型,任意大小的数据

Session 与 Cookie 的区别
Session 存储数据在服务器端,Cookie 存储数据在客户端
Session 没有数据大小限制,Cookie 有数据大小限制
Session 数据安全,Cookie 相对数据不安全

浏览器关闭后,服务器不关闭,两次获取的 Session 对象是同一个吗?

默认情况下,不是同一个。

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

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

        // 浏览器关闭后,session 也能相同
        Cookie cookie = new Cookie("JSESSIONID",session.getId());
        cookie.setMaxAge(60*60);
        response.addCookie(cookie);
    }

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

浏览器不关闭,服务器关闭后,两次获取的 Session 对象是同一个吗?

不是同一个,但是要确保数据不丢失,Tomcat 自动完成以下工作:

Session 的钝化:在服务器正常关闭之前,将 Session 对象序列化到硬盘上
Session 的活化:在服务器启动后,将 Session 文件转化为内存中的 Session 对象。
注意:

在 IDEA 中只能完成 Session 的钝化,但重启服务器后会删除 work 目录,由于 Session 文件存储于 work 目录中,所以无法完成 Session 的活化

但用本地的 Tomcat 部署项目是可以完成 Session 的钝化和活化的

Session 什么时候被销毁?

务器关闭

Session 对象调用 invalidate() 方法

Session 默认失效时间 30 分钟过后


	30

你可能感兴趣的:(session)