cookie和session


概述

客户端技术(请求,响应),只能存String

一般保存在本地的用户目录下appdata

  • 一个cookie只能保存一个信息
  • 一个web站点可以给浏览器发送多个cookie,最多存放20个
  • cookie大小限制4kb
  • 300个cookie浏览器上限
cookie操作
request.getCookies();//获得cookie
cookie.getName();//获得cookie名字
cookie.getValue()//获得cookie值
new Cookie("lastLogTime", System.currentTimeMillis() + "");//新建cookie
cookie.setMaxAge(24 * 60 * 60);//设置cookie有效期
response.addCookie(cookie)//服务端给客户端响应cookie

删除

  • 不设置有效期,关闭浏览器就失效
  • 设置有效期0

编码解码

URLEncoder.encode("你好","utf-8");//编码
URLDecoder.decode("你好","utf-8");//解码

代码

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setCharacterEncoding("utf-8");
        response.setHeader("content-type", "text/html;charset=UTF-8");
        response.setCharacterEncoding("utf-8");
        PrintWriter out = response.getWriter();
        //cookie,服务端从客户端获取
        Cookie[] cookies = request.getCookies();
        if (cookies != null) {
            out.write("上次访问时间:");
            for (Cookie cookie : cookies) {
                if ("lastLogTime".equals(cookie.getName())) {
                    long l = Long.parseLong(cookie.getValue());
                    Date date = new Date(l);
                    out.write(date.toLocaleString());
                }
            }
        } else {
            out.write("第一次访问");
        }
        //添加cookie,服务端响应给客户端
        Cookie cookie = new Cookie("lastLogTime", System.currentTimeMillis() + "");
        //cookie有效期
        cookie.setMaxAge(24 * 60 * 60);
        response.addCookie(cookie);
    }

Session

服务端技术,可以存对象

访问时,session会自动存在,服务端会生产一个sessionId的cookie《nam为JSESSIONID》,并返回给客户端,以后每次请求客户端都会带着这个cookie(钥匙),而用户信息可以保存在服务端session中

注销session:

  • 手动:

    //手动注销session,再访问时又有新的session
    session.invalidate();

  • 设置有效器

    • web.xml配置

          
              30
          
      
    • 代码配置:session.setMaxInactiveInterval(6);

       @Override
          protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
              //乱码解决
              req.setCharacterEncoding("utf-8");
              resp.setCharacterEncoding("utf-8");
              resp.setContentType("text/html;charset=UTF-8");
      
              //获取session
              HttpSession session = req.getSession();
              //设置session有效期
              session.setMaxInactiveInterval(6);
              //存
              session.setAttribute("name", "张三");
              //获取session id
              String sessionId = session.getId();
              //判读是否为新
              if (session.isNew()) {
                  resp.getWriter().write("session创建成功,id为:" + sessionId);
              } else {
                  resp.getWriter().write("session已在服务器中存在,id为:" + sessionId);
              }
          }
      

区别

  • cookie是把用户数据写给客户端浏览器,保存在浏览器
  • session把用户数据写到用户独占的session中,保存在服务器
  • session 的运行依赖 session id,而 session id 是存在 cookie 中的
  • cookie大小有长度限制,4kb左右
  • cookie不太安全
session使用场景
  • 保存登陆用户信息
  • 购物车信息
  • 整个网站中经常使用的数据