Cookie应该是一种应用较久的技术了早在HTML刚刚出现的时候在每个独立的页面之间没有办法记录和标识不同的用户后来人们就发明了 Cookie技术当用户访问网页时它能够在访问者的机器上创立一个文件我们把它叫作Cookie写一段内容进去来标识不同的用户如果下次用户再访问这个网页的时候它又能够读出这个文件里面的内容这样网页就知道上次这个用户已经访问过该网页了
虽然现在网页的制作技术比起几年以前已经发展了许多不过有些时候Cookie还是能够帮我们很多忙的接下来我们就来看看如何在写JSP文件的时候用JSP操作Cookie
写入Cookie
其实用JSP操作Cookie是非常简单的我们来看下面一段JSP程序
<html>
<head>……(中间略)
</head>
<body>
<%
String cookieName=Sender
Cookie cookie=new Cookie(cookieName Test_Content)
cookiesetMaxAge()
responseaddCookie(cookie)
%>
……(其他内容)
</body>
</html>
这样我们就设置了一个Cookie很简单吧?
我们来仔细研究一下这段代码
Cookie cookie=new Cookie(cookieName Test_Content)
这一行建立了一个Cookie对象初始化有两个参数第一个参数cookieName定义了Cookie的名字后一个参数也是一个字符串定义了Cookie的内容也就是我们希望网页在用户的机器上标识的文件内容
接下来一行cookiesetMaxAge()调用了Cookie中的setMaxAge方法设定Cookie在用户机器硬盘上的存活期为 秒一个Cookie在用户的硬盘里面存在的时间并不是无限期的在建立Cookie对象的时候我们必须制定Cookie的存活期超过了这个存活期后Cookie文件就不再起作用会被用户的浏览器自行删除如果我们希望用户在下次访问这个页面的时候Cookie文件仍然有效而且可以被网页读出来的话我们可以将Cookie的存活期设得稍微长一些比如cookiesetMaxAge(***)可以让Cookie文件在一年内有效(wwwliancom)
读出Cookie
Cookie文件创建好后自然还需要我们把它读出来否则我们不是白费力气吗?接下来我们看看如何读出在用户硬盘上的Cookie
<html>
<head>……(中间略)
</head>
<body>
<table border=>
<tr><td>Name</td><td>value</td></tr>
<%
Cookie cookies[]=requestgetCookies()
Cookie sCookie=null
String svalue=null
String sname=null
for(int i=i<cookieslengthi++)
{
sCookie=cookies[i]
svalue=sCookiegetValue()
sname=sCookiegetName()
%>
<tr><td><%=sname%></td><td><%=svalue%></td></tr>
<%
}
%>
</table>……(其他内容)
</body>
</html>
这一小段JSP文件可以读出用户硬盘上的所有有效的Cookie也就是仍然在存活期内的Cookie文件并用表格的形式列出每个Cookie的名字和内容
我们来逐行分析一下这段代码
Cookie cookies[]=requestgetCookies() 我们用requestgetCookies()读出用户硬盘上的Cookie并将所有的Cookie放到一个cookie对象数组里面
接下来我们用一个循环语句遍历刚才建立的Cookie对象数组我们用sCookie=cookies[i]取出数组中的一个Cookie对象然后我们用sCookiegetValue()和sCookiegetName()两个方法来取得这个Cookie的名字和内容
通过将取出来的Cookie的名字和内容放在字符串变量中我们就能对其进行各种操作了在上面的例子里可通过循环语句的遍历将所有Cookie放在一张表格中进行显示
需要注意的一些问题
通过上面两个简单的例子可以看到用JSP进行Cookie的操作是非常简单的不过我们在实际操作中还要注意一些问题
Cookie的兼容性问题
Cookie的格式有个不同的版本第一个版本我们称为Cookie Version 是最初由Netscape公司制定的也被几乎所有的浏览器支持而较新的版本Cookie Version 则是根据RFC 文档制定的为了确保兼容性JAVA规定前面所提到的涉及Cookie的操作都是针对旧版本的Cookie进行的而新版本的Cookie目前还不被Javaxservlet包所支持
Cookie的内容
同样的Cookie的内容的字符限制针对不同的Cookie版本也有不同在Cookie Version 中某些特殊的字符例如空格方括号圆括号等于号(=)逗号双引号斜槓问号@符号冒号分号都不能作为Cookie的内容这也就是为什么我们在例子中设定Cookie的内容为Test_Content的原因
虽然在Cookie Version 规定中放宽了限制可以使用这些字符但是考虑到新版本的Cookie规范目前仍然没有为所有的浏览器所支持因而为保险起见我们应该在Cookie的内容中尽量避免使用这些字符