状态与会话管理

上传人:资****亨 文档编号:129998706 上传时间:2020-04-24 格式:PPT 页数:40 大小:586.50KB
返回 下载 相关 举报
状态与会话管理_第1页
第1页 / 共40页
状态与会话管理_第2页
第2页 / 共40页
状态与会话管理_第3页
第3页 / 共40页
状态与会话管理_第4页
第4页 / 共40页
状态与会话管理_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《状态与会话管理》由会员分享,可在线阅读,更多相关《状态与会话管理(40页珍藏版)》请在金锄头文库上搜索。

1、 状态与会话管理 上海浦东软件园 职业技能培训 会话与状态管理 WEB应用中的会话与会话状态Cookie在Servlet程序中使用CookieSessionSession的典型案例Session的持久化管理 会话与会话状态简介 在日常生活中 从拨通电话到挂断电话之间的一连串的你问我答的过程就是一个会话 WEB应用中的会话是指一个客户端浏览器与WEB服务器之间连续发生的一系列请求和响应过程 WEB应用的会话状态是指WEB服务器与浏览器在会话过程中产生的状态信息 借助会话状态 WEB服务器能够把属于同一会话中的一系列的请求和响应过程关联起来 如何实现有状态的会话 某个用户从网站的登录页面登入后 再

2、进入购物页面购物时 负责处理购物请求的服务器程序必须知道处理上一次请求的程序所得到的用户信息 HTTP协议是一种无状态的协议 WEB服务器本身不能识别出哪些请求是同一个浏览器发出的 浏览器的每一次请求都是完全孤立的 WEB服务器端程序要能从大量的请求消息中区分出哪些请求消息属于同一个会话 即能识别出来自同一个浏览器的访问请求 这需要浏览器对其发出的每个请求消息都进行标识 属于同一个会话中的请求消息都附带同样的标识号 而属于不同会话的请求消息总是附带不同的标识号 这个标识号就称之为会话ID SessionID 会话ID可以通过一种称之为Cookie的技术在请求消息中进行传递 也可以作为请求URL

3、的附加参数进行传递 会话ID是WEB服务器为每客户端浏览器分配的一个唯一代号 它通常是在WEB服务器接收到某个浏览器的第一次访问时产生 并且随同响应消息一道发送给浏览器 会话过程由WEB服务器端的程序开启 一旦开启了一个会话 服务器端程序就要为这个会话创建一个独立的存储结构来保存该会话的状态信息 同一个会话中的访问请求都可以且只能访问属于该会话的存储结构中的状态信息 什么是Cookie Cookie是一种在客户端保持HTTP状态信息的技术 它好比商场发放的优惠卡 Cookie是在浏览器访问WEB服务器的某个资源时 由WEB服务器在HTTP响应消息头中附带传送给浏览器的一片数据 WEB服务器传送

4、给各个客户端浏览器的数据是可以各不相同的 一旦WEB浏览器保存了某个Cookie 那么它在以后每次访问该WEB服务器时 都应在HTTP请求头中将这个Cookie回传给WEB服务器 WEB服务器通过在HTTP响应消息中增加Set Cookie响应头字段将Cookie信息发送给浏览器 浏览器则通过在HTTP请求消息中增加Cookie请求头字段将Cookie回传给WEB服务器 一个Cookie只能标识一种信息 它至少含有一个标识该信息的名称 NAME 和设置值 VALUE 一个WEB站点可以给一个WEB浏览器发送多个Cookie 一个WEB浏览器也可以存储多个WEB站点提供的Cookie 浏览器一般

5、只允许存放300个Cookie 每个站点最多存放20个Cookie 每个Cookie的大小限制为4KB Cookie的传送过程示意图 第一次访问不存在Server1的Cookie 写入Server1的Cookie 第一次响应Set Cookie2 name value 第一次访问请求 WEBServer1 WEBServer2 浏览器 Server1的Cookie Server2的Cookie Cookie存储区 后续访问存在Server1的Cookie 后续访问请求Cookie name value Set Cookie2响应头字段 Set Cookie2头字段用于指定WEB服务器向客户端传

6、送的Cookie内容 但是按照Netscape规范实现Cookie功能的WEB服务器 使用的是Set Cookie头字段 两者的语法和作用类似 Set Cookie2头字段中设置的cookie内容是具有一定格式的字符串 它必须以Cookie的名称和设置值开头 格式为 名称 值 后面可以加上0个或多个以分号 和空格分隔的其它可选属性 属性格式一般为 属性名 值 举例 Set Cookie2 user hello Version 1 Path 除了 名称 值 对必须位于最前面外 其它的可选属性的先后顺序可以任意 Cookie的名称只能由普通的英文ASCII字符组成 浏览器不用关心和理解Cookie

7、的值部分的意义和格式 只要WEB服务器能理解值部分的意义就行 大多数现有的WEB服务器都是采用某种编码方式将值部分的内容编码成可打印的ASCII字符 RFC2965规范中没有明确限定编码方式 Set Cookie2头字段中的属性 Comment valueDiscardDomain value例如 Set Cookie2 user hello Version 1 Path Domain hello orgMax Age valuePath valuePort portlist SecureVersion value 多想一想 如果浏览器接收到两个名称完全相同的Cookie 后面接收的Cooki

8、e是否会替换前面接收的Cookie Cookie请求头字段 浏览器使用Cookie请求头字段将Cookie信息回送给WEB服务器 多个Cookie信息通过一个Cookie请求头字段回送给WEB服务器 浏览器根据下面的几个规则决定是否发送某个Cookie信息 请求的主机名是否与某个存储的Cookie的Domain属性匹配 请求的端口号是否在该Cookie的Port属性列表中 请求的资源路径是否在该Cookie的Path属性指定的目录及子目录中 该Cookie的有效期是否已过 Cookie请求头字段中的每个Cookie之间用逗号 或分号 分隔 在Cookie请求头字段中除了必须有 名称 值 的设置

9、外 还可以有Version Path Domain Port等几个属性 在Version Path Domain Port等属性名之前 都要增加一个 字符作为前缀 Version属性只能出现一次 且要位于Cookie请求头字段设置值的最前面 如果需要设置某个Cookie信息的Path Domain Port等属性 它们必须位于该Cookie信息的 名称 值 设置之后 Path属性指向子目录的Cookie排在Path属性指向父目录的Cookie之前 举例 Cookie Version 1 Course Java Path hello lesson Course vc Path hello 在Se

10、rvlet程序中使用Cookie ServletAPI中提供了一个javax servlet http Cookie类来封装Cookie信息 它包含有生成Cookie信息和提取Cookie信息的各个属性的方法 Cookie类的方法 构造方法 publicCookie java lang Stringname java lang Stringvalue getName方法setValue与getValue方法setMaxAge与getMaxAge方法setPath与getPath方法setDomain与getDomain方法setVersion与getVersion方法setComment与ge

11、tComment方法setSecure与getSecure方法HttpServletResponse接口中定义了一个addCookie方法 它用于在发送给浏览器的HTTP响应消息中增加一个Set Cookie响应头字段 HttpServletRequest接口中定义了一个getCookies方法 它用于从HTTP请求消息的Cookie请求头字段中读取所有的Cookie项 Cookie的综合实例 功能说明 程序包含两个Servlet组件 CookieServlet1 java和CookieServlet2 java CookieServlet1中产生四个名称分别为name nickname em

12、ail phone的Cookie信息 name和nickname这两个Cookie的值是通过请求参数来设置的 并且nickname这个Cookie保持有效的时间为1年 email和phone这两个cookie的值是在程序中硬编码指定的 在产生Cookie信息之后 CookieServlet1接着从请求消息中查找名称为nickname的Cookie信息 并根据返回结果打印出相应的问候语 CookieServlet1还打印出请求消息中的Cookie头字段的值 CookieServlet2首先创建三个名称分别为email phone sign的Cookie信息 并将phone这个Cookie保持有效

13、的时间设置为了0秒 然后打印出请求消息中的Cookie头字段的值和每个Cookie的名称 CookieServlet2中的email和phone这两个Cookie曾在CookieServlet1程序中设置过 在CookieServlet2程序再次进行设置 是为了便于查看设置同名Cookie的效果和了解如何删除Cookie Cookie的综合实例 实践 CookieckName newCookie name name CookieckNickname newCookie nickname nickname ckNickname setMaxAge 365 24 3600 CookieckEmai

14、l newCookie email CookieckPhone newCookie phone 1111111 response addCookie ckName response addCookie ckNickname response addCookie ckEmail response addCookie ckPhone 动手体验 了解Cookie的工作细节 StringlastNickname null Cookie cks request getCookies for inti 0 cks null Session 什么是SessionSession的跟踪机制Session的超时管

15、理HttpSession接口中的方法HttpServletRequest接口中的Session方法application与session域范围的属性比较利用Cookie实现Session跟踪利用URL重写实现Session跟踪 什么是Session 使用Cookie和附加URL参数都可以将上一次请求的状态信息传递到下一次请求中 但是如果传递的状态信息较多 将极大降低网络传输效率和增大服务器端程序处理的难度 Session技术是一种将会话状态保存在服务器端的技术 它可以比喻成是医院发放给病人的病历卡和医院为每个病人保留的病历档案的结合方式 客户端需要接收 记忆和回送Session的会话标识号 S

16、ession可以且通常是借助Cookie来传递会话标识号 Session的跟踪机制 ServletAPI规范中定义了一个HttpSession接口 HttpSession接口定义了各种管理和操作会话状态的方法 HttpSession对象是保持会话状态信息的存储结构 一个客户端在WEB服务器端对应一个各自的HttpSession对象 WEB服务器并不会在客户端开始访问它时就创建HttpSession对象 只有客户端访问某个能与客户端开启会话的Servlet程序时 WEB应用程序才会创建一个与该客户端对应的HttpSession对象 WEB服务器为HttpSession对象分配一个独一无二的会话标识号 然后在响应消息中将这个会话标识号传递给客户端 客户端需要记住会话标识号 并在后续的每次访问请求中都把这个会话标识号传送给WEB服务器 WEB服务器端程序依据回传的会话标识号就知道这次请求是哪个客户端发出的 从而选择与之对应的HttpSession对象 WEB应用程序创建了与某个客户端对应的HttpSession对象后 只要没有超出一个限定的空闲时间段 HttpSession对象就驻留在WEB

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号