会话管理

由于HTTP协议的无状态性,web服务器无法直接处理跨多个请求保留与客户的会话状态的情况,一种比较好的解决方法是使用本章所用的会话管理。

本章内容

  • 将对象保存到会话对象中,并从会话对象中读取对象
  • 何时创建、销毁会话对象,销毁会话对象使用什么机制
  • 使用会话监听者
  • Web容器采用的会话管理机制,cookie的使用以及使用URL重写

1,HttpSession

HttpSession对象可以保存跨同一个客户多个请求的会话状态。对与客户的第一个请求,容器会生成一个唯一的会话ID,并通过响应把它返回给客户,客户再在以后的每个请求中发回这个ID,容器看到ID后,就会找到匹配的会话,并把这个会话与请求关联。

问题:客户和容器如何交换会话ID信息??

cookie。cookie是请求中的另一个首部。生成会话ID、创建新的cookie对象、把会话ID放到 cookie中、把cookie设置为响应的一部分等工作都由容器完成。容器会从请求的cookie中得到会话ID,将这个会话ID与一个现有的会话匹配,并把会话与当前请求关联。

在响应中发送一个会话cookie并且从请求中得到会话ID:

HttpSession session = request.getSession();

IF(请求包含一个会话ID cookie)
找到与该ID匹配的会话
ELSE IF(没有找到会话ID cookie OR 没有与此会话ID匹配的当前会话)
创建一个新会话

cookie所有的工作都在后台进行

判断当前会话是否是一个新会话的方法:

if(session.isNew())
getSession(false)

要么返回null,要么返回一个已有的HttpSession。

问题:如果客户端禁用cookie?

2,URL重写

当不能不会话ID加在cookie中的时候,URL重写可以取得至于cookie中的会话ID,并把会话ID 附加到访问应用的各个URL的最后

如果对URL实现了显示的编码,容器会首先尝试使用cookie来完成会话管理,当cookie方法不行时会转向URL重写。

容器确定cookie是否正常工作以及决定重写URL的办法:
容器看到一个getSession()调用,但是没有从客户的请求中得到会话ID,容器就知道它必须尝试与客户建立一个新的会话。此时容器并不知道cookie是否工作,所以向客户返回第一个响应时,它会同时尝试cookie和URL重写这两种做法。

3,撤销会话

会话的三种“死”法:

  1. 超时
  2. 在会话对象上调用invalidatte()方法–手动撤销。
  3. 应用结束(崩溃或取消部署)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值