javaweb学习14:Cookie讲解

javaweb学习14:Cookie讲解

  • 什么是会话:用户打开一个浏览器,点击了很多超链接,访问多个web资源,关闭浏览器,这个过程可以称之为会话;

  • 一个网站怎么标记你来过?

    • 服务端给客户端一个信件,客户端下次访问服务端带上信件就可以了;Cookie

    • 服务器登记你来过了,下次你来的时候我来匹配你;session

       

  • 有状态会话:一个同学来过教室,下次再来教室,我们会知道这个同学,曾经来过,称之为有状态会话;

 

  • 保存会话的2种技术:

    • cookie

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

    • session

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

 

  • 场景场景:

    • 网站登录之后,你下次不用再登录了,你下次访问直接就上去了;

 

  • Cookie:

    • 从请求中拿到Cookie信息;

    • 服务器响应给客户端Cookie;

      req.getCookies();//获得Cookie
      cookie.getName();//获得Cookie中的key键
      cookie.getValue();//获得Cookie在的值
      new Cookie();//新建一个Cookie
      cookie.setMaxAge(24*60*60);//设置Cookie的有效期
      resp.addCookie(cookie);//响应给客户端一个Cookie

       

    • cookie:一把会保存在本地的,用户目录下appdata;

       

    • 一个网站cookie是否存在上限:

      • 一个Cookie只能保存一个信息;

      • 一个web站点可以给浏览器发送多个cookie,最多存放20个cookie;

      • Cookie大小有限制4kb;

      • 浏览器上限:300个cookie;

         

 

  • 删除Cookie:

    • 不设置有效期:关闭浏览器,自动失效;

    • 设置有效期时间为0;

 

 

 

  • 代码案例:添加Cookie


    /**
    * Cookie:客户端技术
    * 保存用户上一次访问的时间
    */
    public class CookieDemo01 extends HttpServlet {

       @Override
       protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
           //服务器,告诉你,你来的时间,把这个时间封装成为信件,你下次带着来,我就知道你来了


           //解决中文乱码问题
           req.setCharacterEncoding("UTF-8");
           resp.setHeader("content-type", "text/html;charset=UTF-8");
           resp.setCharacterEncoding("UTF-8");

           PrintWriter out = resp.getWriter();

           //Cookie:服务器端从客户都获取:
           Cookie[] cookies = req.getCookies();//这里返回数组,说明Cookie可能存在多个
           //判断Cookie是否存在
           if(cookies !=null){
               //如果存在,怎么办
               out.write("你上一次访问的时间是:");
               for (int i =0;i<cookies.length;i++) {
                   Cookie cookie= cookies[i];
                   //获取Cookie的名字
                   if(cookie.getName().equals("lastLoginTime")){
                       //获取cookie中的值
                       long lastLoginTime= Long.parseLong(cookie.getValue());
                       Date date = new Date(lastLoginTime);
                       out.write(date.toLocaleString());
                  }


              }
          }else{
               out.write("这是您第一次访问本站");
          }

           //服务器给客户端响应一个Cookie:
           Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");
           //给cookie设置有效期,有效期为1天
           cookie.setMaxAge(24*60*60);
           resp.addCookie(cookie);

      }

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

     

  • 代码案例:删除Cookie


    public class CookieDemo02 extends HttpServlet {

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

           //创建一个Cookie,名字必须要和要删除的名字一致
           Cookie cookie = new Cookie("lastLoginTime",System.currentTimeMillis()+"");
           //将Cookie有效期设置为0;立马过期
           cookie.setMaxAge(0);
           resp.addCookie(cookie);



      }

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

     

  • 代码案例:中文编码问题

    /**
    * 中文数据传递
    */
    public class CookieDemo03 extends HttpServlet {

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

           //解决中文乱码问题
           req.setCharacterEncoding("UTF-8");
           resp.setHeader("content-type", "text/html;charset=UTF-8");
           resp.setCharacterEncoding("UTF-8");

           PrintWriter out = resp.getWriter();

           Cookie[] cookies = req.getCookies();
           if(cookies !=null){
               //如果存在,怎么办
               out.write("你上一次访问的时间是:");
               for (int i =0;i<cookies.length;i++) {
                   Cookie cookie= cookies[i];
                   //获取Cookie的名字
                   if(cookie.getName().equals("name")){
                       //System.out.println(cookie.getValue());
                       out.write(URLDecoder.decode(cookie.getValue(),"UTF-8"));//解码
                  }


              }
          }else{
               out.write("这是您第一次访问本站");
          }

           Cookie cookie = new Cookie("name", URLEncoder.encode("张三","UTF-8"));//编码

           resp.addCookie(cookie);

      }

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

     

 

 

 

posted @   gzs1024  阅读(124)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示