一.什么是cookies?java
你们都知道,浏览器与WEB服务器之间是使用HTTP协议进行通讯的,当某个用户发出页面请求时,WEB服务器只是简单的进行响应,而后就关闭与该用户的链接。所以当一个请求发送到WEB服务器时,不管其是不是第一次来访,服务器都会把它看成第一次来对待,这样的很差之处可想而知。为了弥补这个缺陷,Netscape开发出了cookie这个有效的工具来保存某个用户的识别信息,所以人们昵称为“小甜饼”。cookies是一种WEB服务器经过浏览器在访问者的硬盘上存储信息的手段:Netscape Navigator使用一个名为cookies.txt本地文件保存从全部站点接收的Cookie信息;而IE浏览器把Cookie信息保存在相似于C://windows//cookies的目录下。当用户再次访问某个站点时,服务端将要求浏览器查找并返回先前发送的Cookie信息,来识别这个用户。windows
cookies给网站和用户带来的好处很是多:数组
一、Cookie能使站点跟踪特定访问者的访问次数、最后访问时间和访问者进入站点的路径
二、Cookie能告诉在线广告商广告被点击的次数,从而能够更精确的投放广告浏览器
三、Cookie有效期限未到时,Cookie能使用户在不键入密码和用户名的状况下进入曾经浏览过的一些站点安全
四、Cookie能帮助站点统计用户我的资料以实现各类各样的个性化服务服务器
在JSP中,咱们也可使用Cookie,来编写一些功能强大的应用程序。cookie
下面,我想介绍一下如何用JSP建立和处理Cookie。网络
二.如何建立Cookie
import="javax.servlet.http.Cookie"函数
说了这么多,你们必定很想知道JSP是如何建立cookie了。JSP是使用以下的语法格式来建立cookie的:工具
Cookie cookie_name =new Cookie("Parameter","Value");
例如:
Cookie username_Cookie =new Cookie("username","waynezheng");
response.addCookie(username_Cookie);
解释:JSP是调用Cookie对象相应的构造函数Cookie(name,value)用合适的名字和值来建立Cookie,而后Cookie能够经过HttpServletResponse的addCookie方法加入到Set-Cookie应答头,
本例中Cookie对象有两个字符串参数:username,waynezheng。注意,名字和值都不能包含空白字符以及下列字符:@ : ;? , " / [ ] ( ) =
处理Cookie的属性
看到这里,有的朋友又要问了:我光知道如何建立Cookie有什么用呀?是呀,光知道如何建立Cookie而不知道怎么使用是不够的。
在JSP中,程序是经过cookie.setXXX设置各类属性,用cookie.getXXX读出cookie的属性,如今把Cookie的主要属性,及其方法列于下,供你们参考:
类型 | 方法名 | 方法解释 |
String | getComment() | 返回cookie中注释,若是没有注释的话将返回空值. |
String | getDomain() | 返回cookie中Cookie适用的域名. 使用getDomain() 方法能够指示浏览器把Cookie返回给同 一域内的其余服务器,而一般Cookie只返回给与发送它的服务器名字彻底相同的服务器。注意域名必须以点开始(例如.yesky.com) |
int | getMaxAge() | 返回Cookie过时以前的最大时间,以秒计算。 |
String | getName() | 返回Cookie的名字。名字和值是咱们始终关心的两个部分,笔者会在后面详细介绍 getName/setName。 |
String | getPath() | 返回Cookie适用的路径。若是不指定路径,Cookie将返回给当前页面所在目录及其子目录下 的全部页面。 |
boolean | getSecure() | 若是浏览器经过安全协议发送cookies将返回true值,若是浏览器使用标准协议则返回false值。 |
String | getValue() | 返回Cookie的值。笔者也将在后面详细介绍getValue/setValue。 |
int | getVersion() | 返回Cookie所听从的协议版本。 |
void | setComment(String purpose) | 设置cookie中注释。 |
void | setDomain(String pattern) | 设置cookie中Cookie适用的域名 |
void | setMaxAge(int expiry) | 以秒计算,设置Cookie过时时间。 |
void | setPath(String uri) | 指定Cookie适用的路径。 |
void | setSecure(boolean flag) | 指出浏览器使用的安全协议,例如HTTPS或SSL。 |
void | setValue(String newValue) | cookie建立后设置一个新的值。 |
void | setVersion(int v) | 设置Cookie所听从的协议版本。 |
虽然如今网页的制做技术比起几年之前已经发展了许多。不过有些时候,Cookie仍是可以帮咱们不少忙的。接下来,咱们就来看看,如何在写JSP文件的时候,用JSP操做Cookie。
=======================================
2、 保存写入Cookie
其实用JSP操做Cookie是很是简单的,咱们来看下面一段JSP程序:
........(中间略)
//保存写入Cookie
<%
String cookieName="Sender";
Cookie cookie=new Cookie(cookieName, "Test_Content");
cookie.setMaxAge(10); //存活期为10秒
response.addCookie(cookie);
%>
........(其余内容)
这样咱们就设置了一个Cookie,很简单吧?
咱们来仔细研究一下这段代码:
Cookie cookie=new Cookie(cookieName, "Test_Content");
这一行创建了一个Cookie对象,初始化有两个参数,第一个参数cookieName定义了Cookie的名字,后一个参数,也是一个字符串,定义了Cookie的内容。也就是咱们但愿网页在用户的机器上标识的文件内容。
接下来一行:cookie.setMaxAge(10),调用了Cookie中的setMaxAge方法,设定Cookie在用户机器硬盘上的存活期为10秒。一个Cookie在用户的硬盘里面存在的时间并非无限期的,在创建Cookie对象的时候,咱们必须制定Cookie的存活期,超过了这个存活期后,Cookie文件就再也不起做用,会被用户的浏览器自行删除。若是咱们但愿用户在下次访问这个页面的时候,Cookie文件仍然有效并且能够被网页读出来的话,咱们能够将Cookie的存活期设得稍微长一些。好比cookie.setMaxAge(365*24*60*60)可让Cookie文件在一年内有效。
3、 读取出Cookie
Cookie文件建立好后,天然还须要咱们把它读出来,不然咱们不是白费力气吗?接下来咱们看看如何读出在用户硬盘上的Cookie。
........(中间略)
Name value
<%
Cookie cookies[]=request.getCookies(); //读出用户硬盘上的Cookie,并将全部的Cookie放到一个cookie对象数组里面
Cookie sCookie=null;
String svalue=null;
String sname=null;
for(int i=0;i<cookies.length-1;i++{ //用一个循环语句遍历刚才创建的Cookie对象数组
sCookie=cookies[i]; //取出数组中的一个Cookie对象
sname=sCookie.getName(); //取得这个Cookie的名字
svalue=sCookie.getValue(); //取得这个Cookie的内容
%>
<%
}
%>
name value
<%=name%> <%=svalue%>
........(其余内容)
这一小段JSP文件能够读出用户硬盘上的全部有效的Cookie,也就是仍然在存活期内的Cookie文件。并用表格的形式列出每一个Cookie的名字和内容。
咱们来逐行分析一下这段代码:
Cookie cookies[]=request.getCookies() 咱们用request.getCookies()读出用户硬盘上的Cookie,并将全部的Cookie放到一个cookie对象数组里面。
接下来咱们用一个循环语句遍历刚才创建的Cookie对象数组,咱们用sCookie=cookies[i]取出数组中的一个Cookie对象,而后咱们用sCookie.getValue()和sCookie.getName()两个方法来取得这个Cookie的名字和内容。
经过将取出来的Cookie的名字和内容放在字符串变量中,咱们就能对其进行各类操做了。在上面的例子里,可经过循环语句的遍历,将全部Cookie放在一张表格中进行显示。
=======================================
4、 须要注意的一些问题
经过上面两个简单的例子,能够看到,用JSP进行Cookie的操做,是很是简单的。不过咱们在实际操做中还要注意一些问题:
1. Cookie的兼容性问题
Cookie的格式有2个不一样的版本,第一个版本,咱们称为Cookie Version 0,是最初由Netscape公司制定的,也被几乎全部的浏览器支持。而较新的版本,Cookie Version 1,则是根据RFC 2109文档制定的。为了确保兼容性,JAVA规定,前面所提到的涉及Cookie的操做都是针对旧版本的Cookie进行的。而新版本的Cookie目前还不被Javax.servlet.http.Cookie包所支持。
2. Cookie的内容
一样的Cookie的内容的字符限制针对不一样的Cookie版本也有不一样。在Cookie Version 0中,某些特殊的字符,例如:空格,方括号,圆括号,等于号(=),逗号,双引号,斜杠,问号,@符号 ,冒号,分号都不能做为Cookie的内容。这也就是为何咱们在例子中设定Cookie的内容为"Test_Content"的缘由。
虽然在Cookie Version 1规定中放宽了限制,可使用这些字符,可是考虑到新版本的Cookie规范目前仍然没有为全部的浏览器所支持,于是为保险起见,咱们应该在Cookie的内容中尽可能避免使用这些字符。(karry/大众网络报)