1、Cookie概述
Cookie是服务器发送给浏览器的体积很小的纯文本信息,用户以后访问同一个Web服务器时浏览器会把它们原样发送给服务器。通过让服务器读取它原先保存到客户端的信息,网站能够给浏览者提供一系列的方便,例如在线交易过程中标识用户身份、安全要求不高的场合避免用户重复输入名字和密码、门户网站的主页定制、有针对性地投放广告,等等。
Cookie的目的就是为用户带来方便,为网站带来增值。虽然有着许多误传,事实上Cookie并不会造成严重的安全威胁。Cookie永远不会以任何方式执行,因此也不会带来病毒或攻击你的系统。另外,由于浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB,因此Cookie不会塞满你的硬盘,更不会被用作“拒绝服务”攻击手段。
2、Servlet的Cookie API
要把Cookie发送到客户端,Servlet先要调用new Cookie(name, value)用合适的名字和值创建一个或多个Cookie,通过cookie.setXXX设置各种属性,通过response.addCookie(cookie)把cookie加入应答头。
要从客户端读入Cookie,Servlet应该调用request.getCookies(),getCookies()方法返回一个Cookie对象的数组。在大多数情况下,你只需要用循环访问该数组的各个元素寻找指定名字的Cookie,然后对该Cookie调用getValue方法取得与指定名字关联的值。
2.1、创建Cookie
调用Cookie对象的构造函数可以创建Cookie。Cookie对象的构造函数有两个字符串参数:Cookie的名字和Cookie的值。名字和值都不能包含空白字符串以及下列字符串:[]()=,"/?@:;
2.2、读取和设置Cookie属性
把Cookie加入待发送的应答头之前,可以查看或设置Cookie的各种属性。下面简要介绍这些方法:
2.3、在应答头中设置Cookie
Cookie可以通过HttpServletResponse的addCookie方法加入到Set-Cookie应答头。下面是一个例子:
Cookie userCookie = new Cookie("user", "uid123456");
response.addCookie(userCookie);
2.4、读取保存到客户端的Cookie
从客户端读取Cookie时调用的是HttpServletRequest的getCookies方法。该方法返回一个与HTTP请求头中的内容对应的Cookie对象数组。得到这个数组之后,一般是用循环访问其中的各个元素,调用getName检查各个Cookie的名字,直至查找到目标Cookie。然后对这个目标Cookie调用getValue,根据获得的结果进行其他处理。
3、几个Cookie工具函数
3.1、获取指定名字的Cookie的值
该函数是ServletUtils.java的一部分。getCookieValue通过循环依次访问Cookie对