2024年6月2日发(作者:)

由于HTTP协议的无状态特征,Web应用中经常使用Cookie和Session来保存用户在与系统

交互过程中的状态数据。下面通过分析HTTP协议对Cookie和Session的工作原理加以了解。

一、Cookie

Cookie的含义是“服务器送给浏览器的甜点”,即服务器在响应请求时可以将一些数据以

“键-值”对的形式通过响应信息保存在客户端。当浏览器再次访问相同的应用时,会将原

先的Cookie通过请求信息带到服务器端。

下面的Servlet展示了Cookie的功能。

... ... ...

public void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

tentType("text/html");

PrintWriter out = ter();

String option = ameter("option");

if ("show".equals(option)) {

//获得请求信息中的Cookie数据

Cookie[] cookies = kies();

if (cookies != null) {

//找出名称(键)为“cool”的Cookie

for (int i = 0; i < ; i++) {

if ("cool".equals(cookies[i].getName())) {

n("

" + cookies[i].getName() + ":"

+ cookies[i].getValue() + "

");

}

}

}

} else if ("add".equals(option)) {

//创建Cookie对象

Cookie cookie = new Cookie("cool", "yeah!");

//设置生命周期以秒为单位

Age(20);

//添加Cookie

kie(cookie);

}

... ... ...

该Servlet对应的url-pattern为/testCookie

当浏览器请求地址“.../tst/testCookie?option=add”时,该Servlet创建一个Cookie

对象,存储的键-值对为“cool”-“yeah”。通过response的addCookie方法将该Cookie

信息添加到相应信息中。需要注意的是cookie的setMaxAge方法用于设置该cookie生命周

期,单位是秒,如果过了这个期间,Cookie将失效。setMaxAge方法的参数如果为负值则表

示该Cookie将在浏览器关闭时过期,如果参数为0则表示立刻删除该Cookie。访问该地址,

对应的请求和响应的HTTP信息为:

请求:

GET /tst/testCookie?option=add HTTP/1.1

Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,

application/x-shockwave-flash, application/x-silverlight, **

Accept-Language: zh-cn

UA-CPU: x86

Accept-Encoding: gzip, deflate

User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

Host: 192.168.5.100:8080

Connection: Keep-Alive

Cookie: cool=yeah!

响应:

HTTP/1.1 200 OK

Server: Apache-Coyote/1.1

Content-Type: text/html;charset=ISO-8859-1

Content-Length: 21

Date: Sun, 29 Jun 2008 06:15:26 GMT

cool:yeah!

注意,请求协议头中用于携带cookie信息的格式。

Cookie可以用于保持用户的会话状态,但Cookie信息保存在客户端,存在较大的安全隐患,

且一般浏览器对Cookie的数目及数据大小有严格的限制。在Web应用中,一般情况下通过

HttpSession对象保持会话状态。

二、Session