JSP应用与开发技术(第3版)
上QQ阅读APP看书,第一时间看更新

5.2 在JSP中使用Cookie

Cookie实质是服务器端与客户端之间传送的普通HTTP头,可以保存也可以不保存在客户的硬盘上。如果保存,是每个文件大小不超过4KB的文本文件,多个Cookie可保存到同一个文件中。从编程角度来看,在JSP中,Cookie就是Java提供的一个类。

5.2.1 创建Cookie

Cookie是由Javax.servlet.http.Cookie类所衍生出来的对象,建立Cookie的语法如下:

     Cookie objCookie = new Cookie(indexValue,stringValue)

从上面的语法可以看出,一个Cookie对象必须包含一个特定的indexValue索引值与字符串类型的数据内容stringValue,例如:

     Cookie c = new Cookie("mycookie","Cookie Test");

建立了Cookie之后,该Cookie数据还必须传送到客户端,用addCookie()方法发送一个HTTP Header。传送的方式为response.addCookie(objCookie)。

response对象与request对象均提供与Cookie相关的方法成员,利用这些成员,用户可以很方便地访问指定的Cookie内容。上述的程序片段利用response的addCookie()方法将指定的Cookie对象传送至客户端。

5.2.2 读写Cookie

1. 写Cookie

对Cookie进行操作首先是将Cookie保存到客户端。在JSP编程中,利用response对象通过addCookie()方法将Cookie写入客户端。其语法格式如下:

     response.addCookie(cookie);

例如:

     <%//从提交的HTML表单中获取用户名
     String username=request.getParameter(name);
     Cookie user_name=new Cookie("cookie_name",username);//创建一个Cookie
     response.addCookie(user_name);
     %>

2. 读Cookie

将Cookie保存到客户端,就是为了以后得到其中保存的数据。调用HttpServletRequest的getCookies得到一个Cookie对象的数组。其语法格式如下:

     Cookie[] 数组变量名=request.getCookies();

在客户端传来的Cookie数据类型都是数组类型,因此要得到其中某一项指定的Cookie对象,需要遍历数组来找。JSP将调用request.getCookies()从客户端读入Cookie,getCookies()方法返回一个HTTP请求头中的内容对应的Cookie对象数组。用户只需要用循环访问该数组的各个元素,调用getName()方法检查各个Cookie的名字,直至找到目标Cookie,然后对该Cookie调用getValue()方法取得与指定名字关联的值,可通过如下代码实现:

5.2.3 Cookie中的主要方法

在JSP中,通过Cookie.setXXX设置各种属性,使用Cookie.getXXX读出Cookie的属性,Cookie的主要方法及其说明如表5-1所示。

表5-1 Cookie的主要方法及其说明

5.2.4 操作Cookie的常用方法

下面介绍几个操作Cookie的常用方法,这些方法虽然简单,但是在使用Cookie时很有用。

1. 设置Cookie的存在期限

Cookie可以保持登录信息到用户下次与服务器会话,换句话说,下次访问同一网站时,用户会发现不必输入用户名和密码就已经登录了(当然,不排除用户手工删除Cookie)。而还有一些Cookie在用户退出会话的时候就被删除了,这样可以有效保护个人隐私。

Cookie在生成时会被指定一个Expire值,这就是Cookie的生存周期,在这个周期内Cookie有效,超出周期Cookie就会被清除。有效周期的时间以秒为单位,时间设置越大,表示Cookie对象的有效时间越长,如果把有效周期设置为0,则表示此Cookie对象存放在浏览器后将立即失效,如果把有效周期设置为任意一个负数,则当浏览器关闭后,此Cookie对象立即失效。在默认情况下,Cookie是随着用户关闭浏览器而自动消失的,不过,Cookie也可以设置其存在的期限,让用户在下次打开网页时,服务器端仍然能够取得同样一个Cookie中的数据内容。

下面的代码使用setMaxAge()方法设置Cookie对象login在一天之内都是有效的:

     <%
     Cookie login = new Cookie("today","true");
     login.setMaxAge(86400);
     response.addCookie(login);
     %>

如果希望Cookie能够在浏览器退出时自动保存下来,则可以用下面的LongLivedCookie类来取代标准的LongLivedCookie类。LongLivedCookie类的代码如下:

如果不设置过期时间,则表示这个Cookie生命周期为浏览器会话期间,只要关闭浏览器,Cookie就会消失。这种生命期为浏览会话期的Cookie被称为会话Cookie。会话Cookie一般不保存在硬盘上,而是保存在内存里。如果设置了过期时间,浏览器就会把Cookie保存到硬盘上,关闭后再次打开浏览器,这些Cookie依然有效,直到超过设定的过期时间。存储在硬盘上的Cookie可以在不同的浏览器进程间共享,比如两个IE窗口。而对于保存在内存的Cookie,不同的浏览器有不同的处理方式。

2. 删除Cookie

要删除某一个客户端的Cookie,必须使用前面的sexMaxAge()方法,并将Cookie的存在期限设为0,语法如下:

     Cookie名称.setMaxAge(0)

下面的代码在JSP中删除一个Cookie:

     <%
     Cookie killMyCookie = new Cookie("mycookie", null);
     killMyCookie.setMaxAge(0);
     killMyCookie.setPath("/");
     response.addCookie(killMyCookie);
     %>

3. 获取指定名字的Cookie值

下面的代码可以获取指定名字的Cookie值:

本节介绍了在JSP中使用Cookie,用户若能善用以Cookie来存储客户端数据这样的一个方式,将会使得在设计交互式网页时更能得心应手!