当前位置:首页 > Cookie
Cookie详解资料 我爱学习网 www.397158.com 第1 页共3页 我爱学习网 www.397158.com Cookie
一、 什么是Cookie
详解资料
Cookie是Web服务器保存在用户硬盘上的一段文本。Cookie允许一个Web站点在用户电脑上保存信息并且随后再取回它。 举例:一个Web站点可能会为每一个访问者产生一个唯一的ID,然后以Cookie文件的形式保存在每个用户的机器上。 如用户使用IE浏览器访问Web,用户就会看到所有保存在自己硬盘上的Cookie。它们最常存放的地方是:C:\\Windows\\Cookies。Cookie是以“关键字key=值value”的格式来保存记录的。当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。
cookies给网站和用户带来的好处非常多:
1、Cookie能使站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径 2、Cookie能告诉在线广告商广告被点击的次数,从而可以更精确的投放广告
3、Cookie有效期限未到时,Cookie能使用户在不键入密码和用户名的情况下进入曾经浏览过的一些站点 4、Cookie能帮助站点统计用户个人资料以实现各种各样的个性化服务
在JSP中,我们也可以使用Cookie,来编写一些功能强大的应用程序。
Cookie存放在客户端,首先要新建一个Cookie,然后设置其属性,再通过HttpServletResponse对象的addCookie()方法将其放入客户端,获取Cookie对象可调用HttpServletRequest对象的getcookies()方法 二、 创建一个Cookie对象
调用Cookie对象构造函数创建Cookie对象。Cookie对象的构造函数有两个字符串参数:Cookie名字和Cookie值。
Cookie(String cookiename,String cookievalue)
注:参数cookiename是新建的Cookie对象的名称,参数cookievalue是新建的Cookie对象的值。 例如: Cookie cookie_name =new Cookie(\
response.addCookie(newCookie);
三、 处理Cookie的属性
在没有将Cookie发送到客户端,可以通过cookie.setXXX设置属性,用cookie.getXXX读出cookie的属性,属性,方法如下:
1、String getComment() 返回cookie中注释,如果没有注释的话将返回空值. 2、void setComment(String purpose) 设置cookie中注释。
3、String getDomain() 返回cookie中Cookie适用的域名.此方法可以指示浏览器把Cookie返回给同一域内的其他服务器,而
通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名必须以点开始(例如.yesky.com)
4、void setDomain(String pattern) 设置cookie中Cookie适用的域名 5、int getMaxAge() 返回Cookie过期之前的最大时间,以秒计算。 6、void setMaxAge(int expiry) 以秒计算,设置Cookie过期时间。
getMaxAge()/setMaxAge():获取/设置Cookie过期之前的时间,以秒计。如果不设置该值,则Cookie只在当前会话内
有效,即在用户关闭浏览器之前有效,而且这些Cookie不会保存到磁盘上。
7、String getName() 返回Cookie的名字。名字和值是我们始终关心的两个部分,笔者会在后面详细介绍
8、String getPath() 返回Cookie适用的路径。如不指定,Cookie返回给当前页面所在目录及其子目录下的所有页面。 9、void setPath(String uri) 指定Cookie适用的路径。
此方法可用来设定一些条件。例someCookie.setPath(\,此时服务器上的所有页面都可以接收到该Cookie。
10、boolean getSecure() 如果浏览器通过安全协议发送cookies将返回true值,如果浏览器使用标准协议则返回false值。 11、void setSecure(boolean flag) 指浏览器使用的安全协议,该值表示是否只能通过加密的连接(即SSL)或是HTTPS发送。 12、String getvalue() 返回Cookie的值。笔者也将在后面详细介绍getvalue/setvalue。 13、void setvalue(String newvalue) cookie创建后设置一个新的值。(在没有写入客户端之前) 14、int getVersion() 返回Cookie所遵从的协议版本。 15、void setVersion(int v) 设置Cookie所遵从的协议版本。
默认版本0(遵从原先的Netscape规范);版本1遵从RFC 2109,但尚未得到广泛的支持。
四、 将Cookie对象传送到客户端 我爱学习网 www.397158.com
Cookie对象的名称和值都不能包含空白字符以及下列字符:[ ] ( ) = , \
Cookie详解资料 我爱学习网 www.397158.com 第2 页共3页 在JSP、Servlet中,如果要将封装好的Cookie对象传送到客户端,可使用Response对象的addCookie()方法。 例:Cookie cookie = new Cookie(\
response.addCookie(cookie);
五、 读取保存在客户端的Cookie
使用Request对象的getCookie()方法,执行时将所有客户端传来的Cookie对象以数组的形式排列,如果要取出符合需要的Cookie对象,就需要循环比较数组内每个对象的关键字。 例如: Cookie myCookie[]=request.getCookies();
if(myCookie != null) ;
for(int n=0;n=cookie.length-1;i++);
Cookie newCookie= myCookie[n];
if(newCookie.getName().equals(\ //判断元素的值是否为username中的值
//如果找到后,向他问好
//设立一个循环,来访问Cookie对象数组的每一个元素
//创建一个Cookie对象数组
out.println(newCookie.getvalue()); }
Cookie工具函数:用request对象的getCookies()方法得到一个Cookie对象的数组,要找到指定的Cookie对象比较麻烦,
这时可以编写一个得到指定名称的Cookie对象值的方法,这里,提供一个这样的函数。
String getCookieValue(Cookie[] cookieArray, String cookieName,String defaultValue) { for(int i=0; i<cookies.length;i++) { Cookie cookie = cookies[i]; if (cookieName.equals(cookie.getName())) return(cookie.getValue()); } return(defaultValue); } 在此方法中,第一个参数是一个Cookies数组,可以用request.getCookies()方法得到;第二个参数cookieName,查找的Cookie对象的名称;第三个参数defaultValue是在没有找到指定的Cookie对象时返回的值。 六、 Cookie生命周期
设置Cookie对象的有效时间, setMaxAge()方法便可以设置Cookie对象的有效时间,
例如:Cookie c = new Cookie(\
c.setMaxAge(3600);
如果不设置过期时间,则表示这个cookie生命周期为浏览器会话期间,只要关闭浏览器窗口,cookie就消失了。这种生命期为浏览会话期的cookie被称为会话cookie。会话cookie一般不保存在硬盘上而是保存在内存里。
如果设置了过期时间,浏览器就会把cookie保存到硬盘上,关闭后再次打开浏览器,这些cookie依然有效直到超过设定的过期时间。存储在硬盘上的cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的cookie,不同的浏览器有不同的处理方式。 七、 Cookie应用
1、 如何利用实现自动登录
当用户在某个网站注册后,就会收到一个惟一用户ID的cookie。客户后来重新连接时,这个ID会自动返回,服务器对它进行检查,确定它是否为注册用户且选择了自动登录,从而使用户务需给出明确的用户名和密码,就可以访问服务器上的资源。
2、 如何根据用户的爱好定制站点
网站可使用cookie记录用户的意愿。对于简单的设置,网站可直接将页面的设置存储在cookie中完成定制。而对于更复杂的定制,网站只需仅将一个惟一的标识符发送给用户,由服务器端的数据库存储每个标识符对应的页面设置。 3、如何使用cookie检测初访者
调用Request.getCookies()获取Cookie数组→在循环中检索指定名字的cookie是否存在以及对应的值是否正确→如果是则退出循环并设置区别标识→根据区别标识判断用户是否为初访者从而进行不同的操作
我爱学习网 www.397158.com
Cookie详解资料 我爱学习网 www.397158.com 第3 页共3页 使用cookie检测初访者的常见错误: 不能仅因为cookie数组中不存在在特定的数据项就认为用户是个初访者。如果cookie数组为null,客户可能是一个初访者,也可能是由于用户将cookie删除或禁用造成的结果。但是,如果数组非null,也不过是显示客户曾经到过你的网站或域,并不能说明他们曾经访问过你的servlet。其它servlet、JSP页面以及非Java Web应用都可以设置cookie,依据路径的设置,其中的任何cookie都有可能返回给用户的浏览器。 ----------------正确的做法是判断cookie数组是否为空且是否存在指定的Cookie对象且值正确。--------------- 4、如何使用cookie记录各个用户的访问计数
1.获取cookie数组中专门用于统计用户访问次数的cookie的值 2.将值转换成int型
3.将值加1并用原来的名称重新创建一个Cookie对象 4.重新设置最大时效 5.将新的cookie输出
八、 使用cookie属性的注意问题
1、属性是从服务器发送到浏览器的报头的一部分;但它们不属于由浏览器返回给服务器的报头。因此除了名称和值之外,cookie属性只适用于从服务器输出到客户端的cookie;服务器端来自于浏览器的cookie并没有设置这些属性。因而不要期望通过request.getCookies得到的cookie中可以使用这个属性。这意味着,你不能仅仅通过设置cookie的最大时效,发出它,在随后的输入数组中查找适当的cookie,读取它的值,修改它并将它存回Cookie,从而实现不断改变的cookie值。
2、用Cookie可为用户带来方便,但在安全性要求较高的场合下,建议不要用Cookie。此外,浏览器中只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4 kB,故不必担心Cookie会过多地占用硬盘的空间。
3、:客户端可以阻止服务器写入 4、只能拿自己webapp写入的东西
5、一个servlet/jsp设置的cookies能够被同一个路径下面或者子路径下面的servlet/jsp读到 (路径 = URL)
(路径 != 真实文件路径)
就是说:父路径设置的Cookie,子路径可以获取,但子路径设置的Cookie父路径不可以获取(可能因浏览器不同)
我爱学习网 www.397158.com
共分享92篇相关文档