小马哥网络课笔记25------cookie、session

2022-03-02  本文已影响0人  夜凉听风雨

场景

这其中就涉及到cookie和session技术。

流程

访问页面流程.png

图解:

1、小明浏览器访问登录页面后,输入用户名和密码登录。
2、登录成功服务器会创建一个Session,内部保存了小明的id和用户名密码。
3、然后在响应头里返回Set-Cookie:JSEESIONID=666这样的头信息。
4、浏览器收到响应头里的Cookie信息会存在本地。
5、下次再访问localhost:8080/xx/users接口的时候,会在请求头里将Cookie: JSEESIONID=666带上。
6、服务器收到浏览器的请求,发现请求头里有Cookie属于小明的ID和用户名,就会在Session里去查找,如果查找到就会把小明的信息返回给浏览器。


下面我将创建一个项目,来简单看一下效果。项目包括前端的登录页面,和后端的登录接口以及获取users数据的接口。

 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("Application/json;charset=UTF-8");
        String username = req.getParameter("username");
        String password = req.getParameter("password");
        if ("mj".equals(username) && "mj".equals(password)) {
            // 创建session并将用户信息存放到session中
            HttpSession session = req.getSession();
            session.setAttribute("username", username);
            session.setAttribute("password", password);
            resp.getWriter().write("登录成功");
        } else {
            resp.getWriter().write("登录失败");
        }
    }
 @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        /*
            req.getSession()的执行流程
            1.如果req没有带JSESSIONID,就会创建新的session对象
            2.如果req带了JSESSIONID,就会返回相应的session对象
         */
        HttpSession session = req.getSession();
        String username = (String) session.getAttribute("username");
        if ("mj".equals(username)) {
            // 说明session中有mj这个用户名
            resp.getWriter().write("响应数据");
        } else {
            // 说明mj还没有登录成功,重定向到登录页面
            resp.setStatus(302);
            resp.setHeader("Location","/cookie/login.html");
        }
    }

运行项目,访问登录页面

登录页.png

输入用户名密码登录成功,检查login接口,可以看到响应头有一个Set-Cookie,并且值是JSESSIONID=XXXXX; Path=/cookie; path是指定了浏览器下次访问哪个路径请求头里会自动带上这个cookie。

cookie信息.png

如果登录失败直接访问http://localhost:8080/cookie/users,请求不会带上cookie,并且会跳转到登录页面。

如果登录成功,再访问http://localhost:8080/cookie/users,请求会带上cookie,并且拿到数据。

上一篇下一篇

猜你喜欢

热点阅读