java web-02-cookie和session

1、保存会话的两种技术

cookie

  • 客户端技术(响应,请求)

session

  • 服务器技术,利用这个技术,可以保存用户的会话信息?我们可以把信息或者数据放在session中!

常见场景:网站登录之后,之后就不用登录直接进入;

2、Cookie

2.1、获取cookie

public class Cookie01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        //服务器从客户端获取cookie,客户端可能不止一个
        Cookie[] cookies = req.getCookies();
        if (cookies != null) {
            writer.write("上一次时间是:");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                if (cookie.getName().equals("lastLoginTime")){
                    long l = Long.parseLong(cookie.getValue());
                    Date date = new Date(l);
                    writer.write(date.toString());
                }
            }
        }else {
            writer.write("这是第一次登录本站");
        }

        Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
        cookie.setMaxAge(24*60*60);
        resp.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }

添加映射

测试!

2.2、删除cookie

public class Cookie02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Cookie cookie = new Cookie("lastLoginTime", System.currentTimeMillis() + "");
        cookie.setMaxAge(0);
        resp.addCookie(cookie);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

添加映射

测试!

2.3、防止乱码

public class Cookie03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter writer = resp.getWriter();
        //服务器从客户端获取cookie,客户端可能不止一个
        Cookie[] cookies = req.getCookies();
        if (cookies != null) {
            writer.write("上一次访问名是:");
            for (int i = 0; i < cookies.length; i++) {
                Cookie cookie = cookies[i];
                if (cookie.getName().equals("username")) {
                    writer.write(URLEncoder.encode(cookie.getValue(),"utf-8"));
                }
            }
        }else {
            writer.write("这是第一次访问本站");
        }

        Cookie cookie = new Cookie("username", URLEncoder.encode("张三","utf-8"));
        cookie.setMaxAge(60);
        resp.addCookie(cookie);

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

添加映射

测试!

3、session

Session和Cookie的区别:

  • Cookie是把用户的数据写给用户的浏览器,浏览器保存(可以保存多个)
  • Session把用户的数据写到用户独占Session中,服务器端保存
  • Session对象由服务创建;
3.1、往session里面存东西
public class Session01 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        HttpSession session = req.getSession();
        session.setAttribute("name",new Person("zhangsan",20));
        String id = session.getId();
        if (session.isNew()) {
            resp.getWriter().write("session创建成功"+id);
        }else {
            resp.getWriter().write("session已经存在服务器中:"+id);
        }

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

添加映射

测试!

3.2、从session中获取我们存进去的数据
public class Session02 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        HttpSession session = req.getSession();
        Person name = (Person) session.getAttribute("name");
        resp.getWriter().println(name);
        System.out.println(name);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

添加映射

测试!

3.3、注销session
public class Session03 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        HttpSession session = req.getSession();
        session.removeAttribute("name");//移除属性
        session.invalidate();//注销session

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

添加映射

测试!

3.4、设置session自动失效时间
<session-config>
    <!--以分钟为单位-->
    <session-timeout>15</session-timeout>
</session-config>
posted @ 2021-10-11 20:13  比特风  阅读(35)  评论(0)    收藏  举报