zoukankan      html  css  js  c++  java
  • 重温Servlet学习笔记--Cookie对象

      首先要了解cookie必须得先了解http协议,,Cookie是http协议指定的,先由服务器保存cookie到浏览器,在下次浏览器请求服务器时把上次请求得到的cookie归还给服务器,cookie以键值对的形式保存在本地的缓存中.

    • HTTP协议规定:
      1. 1个cookie最大4kb
      2. 一个服务器最多向一个浏览器保存20个cookie
      3. 一个浏览器最多保存300个cookie

    注意,不同浏览器还是略有差异,不是所有浏览器都老老实实的遵守这个规定.

    • cookie的用途举例:
      • 服务器使用cookie来跟踪客户端状态
      • 保存购物车
      • 显示上一次的登录名
    • Cookie的保存与获取:

    我们在a.jsp中保存一个coookie,然后在b.jsp中获取到这个cookie,并遍历出来(因为比较简单,这里只提供代码部分):

    //a.jsp的body部分
      <%
                  Cookie cookie1=new Cookie("name","wang");
                response.addCookie(cookie1);
                 Cookie cookie2=new Cookie("password","123");
                 response.addCookie(cookie2);
        
        %>
    
    //b.jsp的body部分
    <%
            Cookie[] cookie1=request.getCookies();
            for(Cookie c:cookie1){
                out.print(c.getName()+":"+c.getValue()+"<br>");
                
            }
        
        %>
    • Cookie的存活时间(setMaxAge()方法):

      当服务器创建Cookie对象后,可以调用setMaxAge()方法设置Cookie的最大生命。

      •  maxAge > 0:表示Cookie在客户端硬盘上保存的最大时间,单位为秒,如cookie.setMaxAge(60)表示该cookie对象的存活时间为60秒
      •  maxAge < 0:表示Cookie不会被浏览器保存到硬盘上,而只在浏览器内存中存活,一旦客户端关闭浏览器在,那么Cookie就消失;
      •  maxAge == 0:表示删除Cookie,例如客户端硬盘已经存在名为abc的Cookie,如果服务器再向客户端发送名为abc,并且maxAge为0的Cookie,那么表示删除客户端上的名为abc的Cookie。
    • Cookie的路径(path):

    设置cookie的路径需要用到cookie.setPath(String path)方法.例如:cookie.setPath("/cookie1/a");

    如果没有设置cookie的路径,那么cookie的路径默认为是当前资源所在的路径,例如:

      • 访问http://localhost:8080/MyCookieDemo/cookie1/AServlet时保存了一个cookie,那么它的默认路径就是/MyCookieDemo/cookie1
      • 访问http://localhost:8080/MyCookieDemo/cookie1/demo1/BServlet时保存了一个cookie,那么它的默认路径就是/MyCookieDemo/cookie1/demo1

    了解完了cookie的path,那么问题来了,它的用处是什么呢?这玩意有毛用?

        假设现在有WEB应用A,向客户端发送了10个Cookie,这就说明客户端无论访问应用A的哪个Servlet都会把这10个Cookie包含在请求中!这是不科学的,因为也许只有AServlet需要读取请求中的Cookie,而其他Servlet根本就不会获取请求中的Cookie。这说明客户端浏览器有时发送这些Cookie是多余的,这时候就可以通过设置Cookie的path来指定浏览器在访问什么样的路径时,包含什么样的Cookie。

        请求路径如果包含了Cookie路径,那么会在请求中会包含这个Cookie,否则请求中不会包含这个Cookie。如果某cookie的路径是/myCookieDemo/cookie1;当我们访问http://localhost:8080/myCookieDemo/index.jsp时,请求头中就不会携带这个cookie,而如果访问的是http://localhost:8080/myCookieDemo/cookie1/index.jsp时,请求头中就会包含这个cookie,这个页面也就能获取到此cookie中保存的数据.

    • Cookie保存中文

        Cookie的name和value都是不能保存中文的,但可以先把中文转换成URL编码,然后在保存到Cookie的name和value中。下面是代码Demo:

    String name = "姓名";
    String value = "张三";
    name = URLEncoder.encode(name, "utf-8");
    value = URLEncoder.encode(value, "utf-8");
    
    Cookie c = new Cookie(name, value);
    response.addCookie(c);
    
    //在获取Cookie时,再使用URL解码即可。
    Cookie[] cs = request.getCookies();
    if(cs != null) {
    for(Cookie c : cs) {
    String name = URLDecoder.decode(c.getName(), "utf-8");
    String value = URLDecoder.decode(c.getValue(), "utf-8");
    System.out.println(name + "=" + value);
    }
    }



     

     

  • 相关阅读:
    eclipse 直接向cloudfoundry部署应用
    jenkins slave节点服务 之 标签
    cloud foundry 中 url map/unmap
    公司Oracle生产库某用户中毒【AfterConnect.sql】
    怎样在 Linux 上查看某个端口的相关信息?
    怎样修改 VS Code 主题?
    怎样安装并编译TypeScript?
    怎样坚持写博客?
    第一个shell脚本
    python处理excel之读:xlrd模块
  • 原文地址:https://www.cnblogs.com/fingerboy/p/5180598.html
Copyright © 2011-2022 走看看