1、Cookie的应用第16章:Cookie的使用Win7中Cookies的位置:C:UsersAdministratorAppDataRoamingMicrosoftWindowsCookiesXP中Cookies的位置:C :Documents and SettingsAdministratorCookies16.1什么是Cookie对Cookie比较确切的定义是:“Cookie是Web服务器保存在用户硬盘上的一段文本。Cookie允许一个Web站点在用户的电脑上保存信息并且随后再取回它。信息的片段以名/值对(Name-Value Pairs)的形式存储”Cookie的格式实际上是一段纯文本信
2、息,由服务器随着网页一起发送到客户端,并保存再客户端硬盘中指定的目录下。与不同服务器相关的Cookie是分别保存的,服务器读取Cookie的时候,只能够读取与这个服务器相关的信息,所以不会存在什么安全隐患。浏览器一般只允许存放300个Cookie,每个站点最多存放20个,每个Cookie的大小不超过4K,不会占用多少空间。而且Cookie是具有时效性质的,例如设置了Cookie的存活时间为1分钟,则1分钟后这个Cookie就会被浏览器删除。目前Cookie由两个版本:版本0:由Netscape公司制定的,也被几乎所有的浏览器支持,Java中为了保持兼容性,目前只支持到版本0,Cookie内容中
3、不能由空格、方括号、圆括号、等号、逗号、双引号、斜杠、问号、冒号和分好。版本1:是根据RFC2109文档制定的,它放宽了很多限制,上面所限制的字符都可以使用,但为了保持兼容性,应该尽量避免使用这些特殊字符。Cookie最根本的用途是能够帮助Web服务器保存访问者的相关信息。16.2如何使用Cookie16.2.1创建CookieCookie其实是Java提供的一个类,构造函数的参数包括两个字符串(Cookie的名称和值),语法格式如下:Cookie cookie = new Cookie(“CookieName”,”cookieValue”);16.2.2读取和设置Cookie属性用户可以通过
4、下面的方法来查看和设置Cookie对象的属性: String getComment():返回Cookie中的注释,如果没有注释的话返回空值。 String getDomain():返回Cookie中Cookie适用的域名。可以指示浏览器把Cookie返回给同一域内的其他服务器,而通常Cookie只返回给与发送它的服务器名字完全相同的服务器。注意域名要以点开始。 int getMaxAge():返回Cookie过期之前的最大时间,以秒为单位进行计算。默认是浏览器关闭,Cookie就被删除。 String getName():返回Cookie的名字 String getPath():返回Cooki
5、e适用的路径。如果不指定路径Cookie将返回给当前页面所在目录及其子目录下的所有页面。 boolean getSecure():如果浏览器通过安全协议发送Cookie将返回true,如果浏览器适用标准协议则返回false值。 String getValue():返回Cookie的值。 int getVersion():返回Cookie所遵从的协议版本。 void setComment(String purpose) :设置Cookie中的注释。 void setDomain(String pattern) :设置Cookie中Cookie适用的域名。 void setMaxAge(int e
6、xpiry) :以秒计算,设置Cookie过期时间。 void setPath(String uri) :指定Cookie适用的路径。 void setSecure(Boolean flag) :指出浏览器使用的安全协议。 void setValue(String newValue) :Cookie创建后设置一个新的值。 void setVersion(int v) :设置Cookie所遵从的协议版本。下面以setMaxAge为例,演示这些方法如何适用,代码如下:Cookie cookie = new Cookie(myCookie, fxq); cookie.setMaxAge(30*60)
7、;/设置Cookie的存活时间为30分钟 response.addCookie(cookie);/写入客户端硬盘16.2.3再应答头中设置Cookie在JSP编程中利用内置对象response的addCookie方法将Cookie写入客户端。语法如下:response.addCookie(Cookie对象名);下面给出一个具体示例,该示例中将建立一个新的Cookie对象,并设置它的存活时间为30分钟,最后适用应答对象response的addCookie()方法将该Cookie写入客户端。代码如下: 写Cookie示例 写Cookie到客户端,存活时间为30分钟: 运行之后再客户端的Cookie
8、s目录(C :Documents and SettingsAdministratorCookies)下生成对应的文件。16.2.4读取保存到客户端的Cookie将Cookie写到客户端是为了以后得到其中保存的数据,这里可以通过request对象的getCookies方法从中读取数据,语法格式如下:Cookie 变量名 = request.getCookies();客户端传来的Cookie数据类型都是数组类型,要得到其中的某一项必须遍历数组来得到,下面给出一个示例,用于读出上面示例中写到客户端的Cookie,代码如下: 读取Cookie % out.print(读取客户端的某一指定Cookie,
9、结果如下:); Cookie cookies = request.getCookies(); /将适用目录下所有Cookie读入并存入cookies数组中 Cookie cookie = null; String name = null; String value = null; if (cookies = null) /如果没有任何cookie out.print(none any cookie); else if (cookies.length = 0) out.print(客户端不支持Cookie!); else for (int i = 0; i + value + ); % 读取Co
10、okie必须注意两个问题:如果读取结果为空,则说明这个客户端没有对应该服务器的Cookie;如果Cookies数组长度为零,说明客户端浏览器不支持Cookie技术。在30分钟内,读出的结果:myCookie-fxq16.2.5获取指定名字的Cookie值编写一个方法,根据给出的cookieName得到对应的值。 public String getCookieValue(Cookie cookies, String cookieName, String defaultValue) for (int i = 0; i cookies.length; i+) Cookie cookie = cookiesi; if (cookie.getName().equals(cookieName) return cookie.getValue(); return defaultValue; 16.2.6自动保存如果希望浏览器退出的时候自动保存下来,可以用下面这个LongLivedCookie类代替Cookie类,代码如下:import javax.servlet.http.Cookie;public class LongLivedCookie extends Cookie public static fi
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1