会话与状态管理
encodeURL方法 encodeRedirectURL方法
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 什么是Session 什么是Session
Sessiቤተ መጻሕፍቲ ባይዱn技术是一种将会话状态保存在服务器 服务器 端的技术 ,它可以比喻成是医院发放给病人的 病历卡和医院为每个病人保留的病历档案的结 合方式 。 客户端需要接收、记忆和回送 Session的会话 标识号。 使用Cookie和附加URL参数都可以将上一次请 求的状态信息传递到下一次请求中。
浏览器
⑥后续访问请求 Cookie: name=value
Server1 的Cookie ⑤后续访问存在 Server1的Cookie
Server2 的Cookie
WEB Server2
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 利用URL重写实现Session跟踪 利用URL重写实现Session跟踪 URL重写实现Session
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家! Cookie的传送过程示意图 Cookie的传送过程示意图
②第一次访问请求 ①第一次访问不存在 Server1的Cookie ③第一次响应 Set-Cookie2: name=value Cookie存储区 ④写入Server1 的Cookie WEB Server1
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 什么是Cookie 什么是Cookie
Cookie是一种在客户端保持HTTP状态信息的技术 Cookie是一种在客户端保持HTTP状态信息的技术。 是一种在客户端保持HTTP状态信息的技术 Cookie是在浏览器访问WEB服务器的某个资源时,由WEB服务器在HTTP响应消息 由WEB服务器在HTTP响应消息 服务器在HTTP 头中附带传送给浏览器的一片数据,WEB服务器传送给各个客户端浏览器的数据 头中附带传送给浏览器的一片数据 是可以各不相同的。 一旦WEB浏览器保存了某个Cookie,那么它在以后每次访问该WEB服务器时,都 在以后每次访问该WEB服务器时, 在以后每次访问该WEB服务器时 应在HTTP请求头中将这个Cookie回传给WEB服务器。 HTTP请求头中将这个Cookie回传给WEB服务器 应在HTTP请求头中将这个Cookie回传给WEB服务器 WEB服务器通过在HTTP响应消息中增加Set-Cookie响应头字段将Cookie信息发送 给浏览器,浏览器则通过在HTTP请求消息中增加Cookie请求头字段将Cookie回传 给WEB服务器。 一个Cookie只能标识一种信息,它至少含有一个标识该信息的名称(NAME)和 一个Cookie只能标识一种信息 Cookie只能标识一种信息 设置值(VALUE)。 一个WEB站点可以给一个WEB浏览器发送多个Cookie,一个WEB浏览器也可以存储 多个WEB站点提供的Cookie。 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个 Cookie的大小限制为4KB。
Servlet规范中引入了一种补充的会话管理机制,它允许不支持Cookie 它允许不支持Cookie 它允许不支持 的浏览器也可以与WEB服务器保持连续的会话。这种补充机制要求在响 WEB服务器保持连续的会话 的浏览器也可以与WEB服务器保持连续的会话 应消息的实体内容中必须包含下一次请求的超链接,并将会话标识号作 为超链接的URL地址的一个特殊参数。 将会话标识号以参数形式附加在超链接的URL地址后面的技术称为URL重 将会话标识号以参数形式附加在超链接的URL地址后面的技术称为URL重 URL地址后面的技术称为URL 写。如果在浏览器不支持Cookie或者关闭了Cookie功能的情况下,WEB 服务器还要能够与浏览器实现有状态的会话,就必须对所有可能被客户 端访问的请求路径(包括超链接、form表单的action属性设置和重定向 的URL)进行URL重写。 HttpServletResponse接口中定义了两个用于完成URL重写方法:
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家! Session的跟踪机制 Session的跟踪机制
Servlet API规范中定义了一个HttpSession接口 HttpSession接口 HttpSession接口,HttpSession接口定义了各种管理和操作 会话状态的方法。 一个客户端在WEB服务器端对应一个各自的HttpSession对象。 WEB服务器并不会在客户端开始访问它时就创建HttpSession对象 WEB服务器并不会在客户端开始访问它时就创建HttpSession对象,只有客户端访问某个能 服务器并不会在客户端开始访问它时就创建HttpSession对象 与客户端开启会话的Servlet程序时,WEB应用程序才会创建一个与该客户端对应的 HttpSession对象。 WEB服务器为HttpSession对象分配一个独一无二的会话标识号,然后在响应消息中将这个 会话标识号传递给客户端。客户端需要记住会话标识号,并在后续的每次访问请求中都把 这个会话标识号传送给WEB服务器,WEB服务器端程序依据回传的会话标识号就知道这次请 求是哪个客户端发出的,从而选择与之对应的HttpSession对象。 WEB应用程序创建了与某个客户端对应的HttpSession对象后,只要没有超出一个限定的空 只要没有超出一个限定的空 闲时间段,HttpSession对象就驻留在WEB服务器内存之中 闲时间段,HttpSession对象就驻留在WEB服务器内存之中,该客户端此后访问任意的 对象就驻留在WEB服务器内存之中 Servlet程序时,它们都使用与客户端对应的那个已存在的HttpSession对象。 HttpSession接口中专门定义了一个setAttribute方法来将对象存储到HttpSession对象中, 还定义了一个getAttribute方法来检索存储在HttpSession对象中的对象,存储进 HttpSession对象中的对象可以被属于同一个会话的各个请求的处理程序共享。 Session是实现网上商城的购物车的最佳方案,存储在某个客户Session中的一个集合对象 就可充当该客户的一个购物车。
—高级软件人才实作培训专家! 高级软件人才实作培训专家!
JavaWEB开发JavaWEB开发-会话与状态管理 开发
佟刚 petrelsky5@
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 会话与会话状态简介
在日常生活中, 在日常生活中,从拨通电话到挂断电话之间的一连串 的你问我答的过程就是一个会话。 的你问我答的过程就是一个会话。 WEB应用中的会话是指一个客户端浏览器与WEB服务器 WEB应用中的会话是指一个客户端浏览器与WEB服务器 应用中的会话是指一个客户端浏览器与WEB 之间连续发生的一系列请求和响应过程。 之间连续发生的一系列请求和响应过程。 WEB应用的会话状态是指WEB服务器与浏览器在会话过 WEB应用的会话状态是指WEB服务器与浏览器在会话过 应用的会话状态是指WEB 程中产生的状态信息,借助会话状态,WEB服务器能 程中产生的状态信息,借助会话状态,WEB服务器能 够把属于同一会话中的一系列的请求和响应过程关联 起来。 起来。
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家! Session的超时管理 Session的超时管理
WEB服务器无法判断当前的客户端浏览器是否还会继续访问,也无法检测客户端 浏览器是否关闭,所以,即使客户已经离开或关闭了浏览器,WEB服务器还要保 留与之对应的HttpSession对象。 随着时间的推移而不断增加新的访问客户端,WEB服务器内存中将会因此积累起 大量的不再被使用的HttpSession对象,并将最终导致服务器内存耗尽。 WEB服务器采用“超时限制”的办法来判断客户端是否还在继续访问,如果某个 WEB服务器采用“超时限制”的办法来判断客户端是否还在继续访问 服务器采用 客户端在一定的时间之内没有发出后续请求,WEB服务器则认为客户端已经停止 了活动,结束与该客户端的会话并将与之对应的HttpSession对象变成垃圾。 如果客户端浏览器超时后再次发出访问请求,WEB服务器则认为这是一个新的会 话的开始,将为之创建新的HttpSession对象和分配新的会话标识号。 会话的超时间隔可以在web.xml文件中设置,其默认值由Servlet容器定义。 会话的超时间隔可以在web.xml文件中设置 web.xml文件中设置
北京传智播客教育
—高级软件人才实作培训专家! 高级软件人才实作培训专家! 如何实现有状态的会话
某个用户从网站的登录页面登入后,再进入购物页面购物时, 某个用户从网站的登录页面登入后,再进入购物页面购物时,负责处理购物请 求的服务器程序必须知道处理上一次请求的程序所得到的用户信息。 求的服务器程序必须知道处理上一次请求的程序所得到的用户信息。 HTTP协议是一种无状态的协议,WEB服务器本身不能识别出哪些请求是同一个 协议是一种无状态的协议, 服务器本身不能识别出哪些请求是同一个 协议是一种无状态的协议 浏览器的每一次请求都是完全孤立的。 浏览器发出的 ,浏览器的每一次请求都是完全孤立的。 WEB服务器端程序要能从大量的请求消息中区分出哪些请求消息属于同一个会 服务器端程序要能从大量的请求消息中区分出哪些请求消息属于同一个会 话,即能识别出来自同一个浏览器的访问请求,这需要浏览器对其发出的每个 即能识别出来自同一个浏览器的访问请求, 请求消息都进行标识,属于同一个会话中的请求消息都附带同样的标识号, 请求消息都进行标识,属于同一个会话中的请求消息都附带同样的标识号,而 属于不同会话的请求消息总是附带不同的标识号,这个标识号就称之为会话ID 属于不同会话的请求消息总是附带不同的标识号,这个标识号就称之为会话 (SessionID)。 )。 会话ID可以通过一种称之为 的技术在请求消息中进行传递, 会话 可以通过一种称之为Cookie的技术在请求消息中进行传递,也可以作为 可以通过一种称之为 的技术在请求消息中进行传递 请求URL的附加参数进行传递。会话 是WEB服务器为每客户端浏览器分配的 的附加参数进行传递。 服务器为每客户端浏览器分配的 请求 的附加参数进行传递 会话ID是 一个唯一代号,它通常是在WEB服务器接收到某个浏览器的第一次访问时产生, 服务器接收到某个浏览器的第一次访问时产生, 一个唯一代号,它通常是在 服务器接收到某个浏览器的第一次访问时产生 并且随同响应消息一道发送给浏览器。 并且随同响应消息一道发送给浏览器。 会话过程由WEB服务器端的程序开启,一旦开启了一个会话,服务器端程序就 服务器端的程序开启,一旦开启了一个会话, 会话过程由 服务器端的程序开启 要为这个会话创建一个独立的存储结构来保存该会话的状态信息, 要为这个会话创建一个独立的存储结构来保存该会话的状态信息,同一个会话 中的访问请求都可以且只能访问属于该会话的存储结构中的状态信息。 中的访问请求都可以且只能访问属于该会话的存储结构中的状态信息。