教学文库网 - 权威文档分享云平台
您的当前位置:首页 > 范文大全 > 行业范文 >

深入理解Session,cookie

来源:网络收集 时间:2026-08-09
导读: 由于HTTP协议的无状态特征,Web应用中经常使用Cookie和Session来保存用户在与系统交互过程中的状态数据。下面通过分析HTTP协议对Cookie和Session的工作原理加以了解。 深入理解Servlet/JSP之“Cookie和Session原理” (2008-06-29 13:41:09) 转载 标签:it it

由于HTTP协议的无状态特征,Web应用中经常使用Cookie和Session来保存用户在与系统交互过程中的状态数据。下面通过分析HTTP协议对Cookie和Session的工作原理加以了解。

深入理解Servlet/JSP之“Cookie和Session原理”

(2008-06-29 13:41:09)

转载

标签:it it培训 java jsp servlet session cookie session持久化

由于HTTP协议的无状态特征,Web应用中经常使用Cookie和Session来保存用户在与系统交互过程中的状态数据。下面通过分析HTTP协议对Cookie和Session的工作原理加以了解。

一、Cookie

Cookie的含义是“服务器送给浏览器的甜点”,即服务器在响应请求时可以将一些数据以“键-值”对的形式通过响应信息保存在客户端。当浏览器再次访问相同的应用时,会将原先的Cookie通过请求信息带到服务器端。

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

... ... ...

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

String option = request.getParameter("option");

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

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

Cookie[] cookies = request.getCookies();

if (cookies != null) {

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

for (int i = 0; i < cookies.length; i++) {

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

out.println("<h2>" + cookies[i].getName() + ":"

+ cookies[i].getValue() + "</h2>");

}

}

}

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

//创建Cookie对象

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

由于HTTP协议的无状态特征,Web应用中经常使用Cookie和Session来保存用户在与系统交互过程中的状态数据。下面通过分析HTTP协议对Cookie和Session的工作原理加以了解。

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

cookie.setMaxAge(20);

//添加Cookie

response.addCookie(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

<h2>cool:yeah!</h2>

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

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

由于HTTP协议的无状态特征,Web应用中经常使用Cookie和Session来保存用户在与系统交互过程中的状态数据。下面通过分析HTTP协议对Cookie和Session的工作原理加以了解。

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

二、Session

Session对象的原理在于,服务器可以为客户端创建并维护一个所谓的Session对象,用于存放数据。在创建Session对象的同时,服务器将会为该Session对象产生一个唯一编号,这个编号称之为SessionID,服务器以Cookie的方式将SessionID存放在客户端。当浏览器再次访问该服务器时,会将SessionID作为 Cookie信息带到服务器,服务器可以通过该SessionID检索到以前的Session对象,并对其进行访问。需要注意的是,此时的Cookie中仅仅保存了一个SessionID,而相对较多的会话数据保存在服务器端对应的Session对象中,由服务器来统一维护,这样一定程度保证了会话数据安全性,但增加了服务器端的内存开销。

存放在客户端的用于保存SessionID的Cookie会在浏览器关闭时清除。我们把用户打开一个浏览器访问某个应用开始,到关闭浏览器为止交互过程称为一个“会话”。在一个“会话”过程中,可能会向同一个应用发出了多次请求,这些请求将共享一个Session对象,因为这些请求携带了相同的SessionID信息。

1. Session工作原理

下面的Servlet用来演示Session的工作原理:

... ... ...

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html");

PrintWriter out = response.getWriter();

String option = request.getParameter("option");

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

//获得HttpSession对象

HttpSession session = request.getSession();

//设置Session对象的最长不活动间隔

session.setMaxInactiveInterval(30);

//获取Session中的数据

List list = (List) session.getAttribute("list");

if (list == null) {

list = new ArrayList();

由于HTTP协议的无状态特征,Web应用中经常使用Cookie和Session来保存用户在与系统交互过程中的状态数据。下面通过分析HTTP协议对Cookie和Session的工作原理加以了解。

list.add("hey");

//向Session中添加数据

session.setAttribute("list", list);

} else {

list.add("hey");

}

out.println(list);

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

HttpSession session = request.getSession(false);

if (session != null) {

//使Session对象失效

session.invalidate();

}

}

... ... ...

该Servlet的url …… 此处隐藏:6709字,全部文档内容请下载后查看。喜欢就下载吧 ……

深入理解Session,cookie.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.jiaowen.net/fanwen/983666.html(转载请注明文章来源)
Copyright © 2020-2025 教文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:78024566 邮箱:78024566@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)