zoukankan      html  css  js  c++  java
  • Cookie学习

    Cookie学习

    1、Cookie的概念

    Cookie是客户端技术,程序把用户的数据以cookie的形式写给用户的浏览器。

    当客户端首次请求访问服务器时,服务器先在客户端存放包含该客户的相关信息的Cookie,以后客户端每次请求访问服务器时,都会在HTTP请求数据中包含Cookie,服务器解析HTTP请求中的Cookie,就能由此获得关于客户的相关信息。

    2、Session和Cookie的主要区别

    • Cookie是把用户的数据写给用户的浏览器,是客户端技术,会话数据存放在浏览器,数据类型只能是String,而且有大小限制,数据存放不安全。
    • Session技术把用户的数据写到用户独占的session中,是服务器端技术,会话数据存放在服务器(服务器内存),数据类型任意,没有大小限制,相对安全。

    3、Java提供的操作Cookie的API

      Java中的javax.servlet.http.Cookie类用于创建一个Cookie

    Cookie类的主要方法

    No.

    方法

    类型

    描述

    1

    Cookie(String name, String value)

    构造方法

    实例化Cookie对象,传入cooke名称和cookie的值

    2

    public String getName()

    普通方法

    取得Cookie的名字

    3

    public String getValue()

    普通方法

    取得Cookie的值

    4

    public void setValue(String newValue)

    普通方法

    设置Cookie的值

    5

    public void setMaxAge(int expiry)

    普通方法

    设置Cookie的最大保存时间,即cookie的有效期,当服务器给浏览器回送一个cookie时,如果在服务器端没有调用setMaxAge方法设置cookie的有效期,那么cookie的有效期只在一次会话过程中有效,用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称之为一次会话,当用户关闭浏览器,会话就结束了,此时cookie就会失效,如果在服务器端使用setMaxAge方法设置了cookie的有效期,比如设置了30分钟,那么当服务器把cookie发送给浏览器时,此时cookie就会在客户端的硬盘上存储30分钟,在30分钟内,即使浏览器关了,cookie依然存在,在30分钟内,打开浏览器访问服务器时,浏览器都会把cookie一起带上,这样就可以在服务器端获取到客户端浏览器传递过来的cookie里面的信息了,这就是cookie设置maxAge和不设置maxAge的区别,不设置maxAge,那么cookie就只在一次会话中有效,一旦用户关闭了浏览器,那么cookie就没有了,那么浏览器是怎么做到这一点的呢,我们启动一个浏览器,就相当于启动一个应用程序,而服务器回送的cookie首先是存在浏览器的缓存中的,当浏览器关闭时,浏览器的缓存自然就没有了,所以存储在缓存中的cookie自然就被清掉了,而如果设置了cookie的有效期,那么浏览器在关闭时,就会把缓存中的cookie写到硬盘上存储起来,这样cookie就能够一直存在了。

    6

    public int getMaxAge()

    普通方法

    获取Cookies的有效期

    7

    public void setPath(String uri)

    普通方法

    设置cookie的有效路径,比如把cookie的有效路径设置为"/xdp",那么浏览器访问"xdp"目录下的web资源时,都会带上cookie,再比如把cookie的有效路径设置为"/xdp/gacl",那么浏览器只有在访问"xdp"目录下的"gacl"这个目录里面的web资源时才会带上cookie一起访问,而当访问"xdp"目录下的web资源时,浏览器是不带cookie的

    8

    public String getPath()

    普通方法

    获取cookie的有效路径

    9

    public void setDomain(String pattern)

    普通方法

     设置cookie的有效域

    10

    public String getDomain()

    普通方法

     获取cookie的有效域

      response接口也中定义了一个addCookie方法,它用于在其响应头中增加一个相应的Set-Cookie头字段。 同样,request接口中也定义了一个getCookies方法,它用于获取客户端提交的Cookie。

    4、Java提供的操作Cookie的API

      对Cookie的操作无外乎三部分:读、分析、写

    写Cookie

    Cookie theCookie = new Cookie(“username” , “Tom”);
    theCookie.setMaxAge(60*60*24*30);//设置cookie有效期为30天   response.addCookie(theCookie);

    读取分析客户端Cookie以及对Cookie的修改和删除

         Cookie[] cookies = request.getCookies();
         Cookie c =null;
    for(int i = 0; cookies != null && i < cookies.length; i++){
       c = cookies[i];
       out.println("Cookie name:" + c.getName());
                    out.println("Cookie value:" + c.getValue());
                    out.println("Cookie maxAge:" + c.getMaxAge());
             if(cookie==null){
                    cookie=new Cookie("username" , "Tom");
                    cookie.setMaxAge(60*60);
                    res.addCookie(cookie);
                  }else if(cookie.getValue().equals("Tom")){
                    cookie.setValue("Jack");
                      res.addCookie(cookie);
                  }else if(cookie.getValue().equals("Jack")){
         //将cookie的有效期设置为0,命令浏览器删除该cookie
                      cookie.setMaxAge(0);
                      res.addCookie(cookie);
                  }
    }

     5、Cookie中存取中文

    要想在cookie中存储中文,那么必须使用URLEncoder类里面的encode(String s, String enc)方法进行中文转码,例如:

     Cookie cookie = new Cookie("userName", URLEncoder.encode("孤傲苍狼", "UTF-8"));
     response.addCookie(cookie);

      在获取cookie中的中文数据时,再使用URLDecoder类里面的decode(String s, String enc)进行解码,例如:

     URLDecoder.decode(cookies[i].getValue(), "UTF-8")

     6、Cookie注意细节

    1. 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和设置值(VALUE)。
    2. 一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储多个WEB站点提供的Cookie。
    3. 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。
    4. setPath(path):默认情况下,是当前项目的根目录下,可以通过setpath更改,如果把该cookie设置到某个有效路径下,只有当访问该有效路径的时候才会携带该cookie信息
    5. cookie的数据类型一定是字符串,如果发送中文,需要通过URLEncoder进行加密,和URlDecoder进行解密。
    6. 如果创建了一个cookie,并将他发送到浏览器,默认情况下它是一个会话级别的cookie(即存储在浏览器的内存中),用户退出浏览器之后即被删除。若希望浏览器将该cookie存储在磁盘上,则需要使用maxAge,并给出一个以秒为单位的时间。将最大时效设为0则是命令浏览器删除该cookie。
    7. setMaxAge(整数): 设置cookie的有效时间。
        • 正整数:表示超过了正该值cookie会丢失(cookie保存到浏览器的缓存中),单位:秒。
        • 负整数:表示如果浏览器关闭了,cookie就会消失(cookie保存在浏览器的内存中)
        • 0:表示删除同名的cookie
  • 相关阅读:
    〖Linux〗Kubuntu设置打开应用时就只在打开时的工作区显示
    〖Linux〗Kubuntu, the application 'Google Chrome' has requested to open the wallet 'kdewallet'解决方法
    unity, dll is not allowed to be included or could not be found
    android check box 自定义图片
    unity, ios skin crash
    unity, Collider2D.bounds的一个坑
    unity, ContentSizeFitter立即生效
    类里的通用成员函数应声明为static
    unity, Gizmos.DrawMesh一个坑
    直线切割凹多边形
  • 原文地址:https://www.cnblogs.com/huangdabing/p/9183574.html
Copyright © 2011-2022 走看看