会话跟踪技术 Session Cookie

1 什么是会话?

用户打开浏览器,访问 web 服务器的资源,这个时候会话建立起来,直到有一方断开了连接,会话结束。在一次的会话中可以包含多次的请求以及相应;

  • 会话跟踪就是在一次会话的多次请求中共享数据;

一个浏览器访问一个服务器两者之间建立起来的就是一个会话,浏览器关闭页面,会话结束;

为什么需要共享数据? 比如一个登录功能,浏览器在保持打开的状态下,不小心点击了刷新,访问的是同一个服务器,乜有共享数据的话,上一次的登录信息都消失了,显然用户体验是不好的,所以这个时候需要进行会话跟踪,提高用户的体验; 在这里插入图片描述

共享数据,可以方便一些用户的操作,告诉服务器虽然是多次的操作,但是是一个用户发送的请求,同一个用户请求的数据是可以共享的; 比如登录一页网页,短时间内,不需要反复的登录,让服务器记住刚才是某个用户登录的就行;

2 解决 http 协议中的无状态实现方式

客户端会话跟踪技术:Cookie 服务端会话跟踪技术:Ssession

3 Cookie

3.1 Cookie 基本使用原理

3.1.1 服务端向浏览器发送 Cookie

在这里插入图片描述

@WebServlet("/aServlet")
public class AServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1 创建 Cookie 对象
        Cookie cookie = new Cookie("usernaem","zs");

        // 2 发送 Cookie response
        response.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}
复制代码

3.1.2 服务器获取浏览器发送来的 Cookie

@WebServlet("/bServlet")
public class BServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1 获取 Cookie 数组
        Cookie[] cookies = request.getCookies();

        // 2 遍历数组
        for (Cookie cookie : cookies) {
            // 3 获取数据
            String name = cookie.getName();

            if ("username".equals(name)) {
                String value = cookie.getValue();
                System.out.println(name + ":" + value);
            }
        }

    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        this.doGet(request, response);
    }
}
复制代码

3.3 Cookie 原理

Cookie 是怎么实现一次会话,两次访问的数据共享的 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

法

实现原理就是,服务器在响应头中将数据发送到浏览器,然后浏览器再访问该服务器的时候,在请求头中将 cookie 携带过去

3.4 Cookie 使用细节

在这里插入图片描述 中文的问题可以通过编码以及解码的形式进行解决

4 Session

将数据保存在服务端; Java EE 提供 HttpSession 接口,实现了一次会话多次请求间数据共享的功能; 在这里插入图片描述

4.1 Session 基本使用

4.1.1 SessionDemo1

@WebServlet("/sessionDemo1")
public class SessionDemo1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取Session 对象
        HttpSession session = request.getSession();

        // 存储到 Session 中
        session.setAttribute("username","zs");
    }

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

复制代码

4.1.2 SessionDemo2

@WebServlet("/sessionDemo2")
public class SessionDemo2 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取 Session 对象
        HttpSession session = request.getSession();

        // 获取数据
        Object username = session.getAttribute("username");

        System.out.println(username);
    }

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

复制代码

4.2 Session 原理

Session 是基于 Cookie 的 在这里插入图片描述

在这里插入图片描述

4.3 Session 使用细节

浏览器关闭了之后,获取到的 Session 就不是一个了,因为相当于开启了两次会话,是两个不一样的会话;不关闭服务器,多次访问同一个服务器,那么 Session 就是同一个,因为始终是一个会话;Session 的数据,不能关闭服务器,但是 Cookie 的数据可以在计算机中存储很长时间;

在这里插入图片描述

5 小结

在这里插入图片描述

Cookie 为了长期存储,未登录就可以识别的情况下使用; Session 存储的是安全数据;

6 登录注册案例需求

6.1 需求说明

1、完成用户登录功能,如果用户勾选"记住用户" 下次的访问到登录界面自动的填充用户名以及密码; 在这里插入图片描述

在这里插入图片描述 2、完成注册功能,实现验证码功能 在这里插入图片描述

Guess you like

Origin juejin.im/post/7074905085351821348