• 读取Cookie及Cookie所有属性操作方法


    读取Cookie及Cookie所有属性操作方法  

    2013-08-04 22:21:43|  分类: 技术 |  标签:cookie  |举报|字号 订阅


     

        要把Cookie发送到客户端,Servlet先要调用new Cookie(name,value)用合适的名字和值创建一个或多个Cookie,通过cookie.setXXX设置各种属性,通过response.addCookie(cookie)把cookie加入应答头。

      要从客户端读入Cookie,Servlet应该调用request.getCookies(),getCookies()方法返回一个Cookie 对象的数组。在大多数情况下,你只需要用循环访问该数组的各个元素寻找指定名字的Cookie,然后对该Cookie调用getValue方法取得与指定 名字关联的值。

     

    一、浏览器允许每个域名所包含的cookie数:

      Microsoft指出InternetExplorer8增加cookie限制为每个域名50个,但IE7似乎也允许每个域名50个cookie

      Firefox每个域名cookie限制为50个。

      Opera每个域名cookie限制为30个。

      Safari/WebKit貌似没有cookie限制。但是如果cookie很多,则会使header大小超过服务器的处理的限制,会导致错误发生。

      注:“每个域名cookie限制为20个”将不再正确!

    二、当很多的cookie被设置,浏览器如何去响应。

      除Safari(可以设置全部cookie,不管数量多少),有两个方法:

      最少最近使用(leastrecentlyused(LRU))的方法:当Cookie已达到限额,自动踢除最老的Cookie,以使给最新的Cookie一些空间。InternetExplorer和Opera使用此方法。

      Firefox很独特:虽然最后的设置的Cookie始终保留,但似乎随机决定哪些cookie被保留。似乎没有任何计划(建议:在Firefox中不要超过Cookie限制)。

    三、不同浏览器间cookie大小也不同:

      Firefox和Safari允许cookie多达4097个字节,包括名(name)、值(value)和等号。

      Opera允许cookie多达4096个字节,包括:名(name)、值(value)和等号。

      InternetExplorer允许cookie多达4095个字节,包括:名(name)、值(value)和等号。

    注:多字节字符计算为两个字节。在所有浏览器中,任何cookie大小超过限制都被忽略,且永远不会被设置。

     

     

     读取Cookie及Cookie所有属性操作方法,Cookie大小

     

    1.设置Cookie  

    Cookie cookie = new Cookie("key", "value");  
    cookie.setMaxAge(60);  

    设置60秒生存期,如果设置为负值的话,则为浏览器进程Cookie(内存中保存),关闭浏览器就失效。  

    cookie.setPath("/test/test2");  

    设置Cookie路径,不设置的话为当前路径(对于Servlet来说为request.getContextPath() + web.xml里配置的该Servlet的url-pattern路径部分)  

    response.addCookie(cookie);  

    2.读取Cookie  

    该方法可以读取当前路径以及“直接父路径”的所有Cookie对象,如果没有任何Cookie的话,则返回null  

    Cookie[] cookies = request.getCookies();  

    3.删除Cookie  

    Cookie cookie = new Cookie("key", null);  

    cookie.setMaxAge(0);  

    设置为0为立即删除该Cookie  

    cookie.setPath("/test/test2");  

    删除指定路径上的Cookie,不设置该路径,默认为删除当前路径Cookie  

    response.addCookie(cookie);  

    4.注意:假设路径结构如下  

    test/test2/test345/test555/test666  


    a.相同键名的Cookie(值可以相同或不同)可以存在于不同的路径下。  

    b. 删除时,如果当前路径下没有键为"key"的Cookie,则查询全部父路径,检索到就执行删除操作(每次只能删除一个与自己最近的父路径Cookie)  

    FF.必须指定与设定cookie时使用的相同路径来删除改cookie,而且cookie的键名不论大写、小写或大小混合都要指定路径。  

    IE.键名小写时,如果当前路径为/test/test2,如果找不到再向上查询/test、/test555、/test345,如果还找不到就查询/ 。(/test555/test666不查询)  

    键名大小写混合或大写时,不指定路径则默认删除当前路径,并且不向上查询。  

    c.读取Cookie时只能读取直接父路径的Cookie。  

    如果当前路径为/test/test2,要读取的键为"key"。当前路径读取后,还要读取/test,/test读取后,还要读取/  

    d.在做Java的web项目时,由于一般的Web服务器(如Tomcat或Jetty)都用Context来管理不同的Web Application,这样对于每个Context有不同的Path,  

    在一个Server中有多个Web Application时要特别小心,不要设置Path为/的Cookie,容易误操作。(当然前提是域名相同)

     评论这张

  • 相关阅读:
    [NOI2017]游戏
    [USACO09MAR]Cleaning Up
    [POI2010]Blocks
    [JSOI2011]分特产
    [POI2001]Peaceful Commission
    BZOJ4152 [AMPPZ2014]The Captain
    Luogu P3783 [SDOI2017]天才黑客
    Luogu P3645 [APIO2015]雅加达的摩天楼
    Luogu P1613 跑路
    AGC009E Eternal Average
  • 原文地址:https://www.cnblogs.com/xiaoleidiv/p/3754541.html
Copyright © 2020-2023  润新知