Servlet的Session(第七篇)

HTTP设计成无状态的协议,但是怎么知道是哪个客户端,有时需要知道,客户端识别,Servlet 定义一个HttpSession接口

7.1、session追踪机制

7.1.1、Cookies

  • 所有servlet必须要支持Cookies机制
  • servlet给每个客户端发送一个cookie,标识客户,下次客户请求serlvet服务器,需要传cookie到服务器端, 标准的session名称为JSESSIONID

7.1.2、SSL Sessions

  • SSL 加密Sessions

7.1.3、URL 重写

  • 就是客户端没有开启cookies保存,这个时候怎么确定客户端是谁呢,只能就cookie放置到URL上,作为某一个参数,一般session名称是jsessionid

  • 例子

    • http://www.myserver.com/catalog/index.html;jsessionid=1234
      

7.1.4、Session整合

  • 简单来说,需要支持URL重写(将sessionId 作为url的一个参数)

7.2、创建一个session

  • 什么是创建
    1. 客户端不知道有已经创建的session
    2. 客户端选择不加入这个session
  • servlet开发者需要设计这个应用处理客户端没有session,客户端不支持session、将不会加入一个session的情形
  • 获取sessionId ,通过javax.servlet.http.HttpSession.getId(), sessionId改变时候需要调用javax.servlet.http.HttpServletRequest.changeSessionId()

7.3、Session 作用域

  • HttpSession 作用域是应用级别或servlet上下文级别,不同servlet是不允许共享HttpSession,也包含HttpSession属性

7.4、Session绑定属性

  • 绑定属性变更需要实现HttpSessionBindingListener
    • valueBound (绑定属性通知)
    • valueUnbound(解除绑定属性通知)

7.5、Session 超时

  • 怎么判断客户端不在请求呢? servlet 在HttpSession.setMaxInactiveInterval方法设置超时时间,单位为秒,如果设置为0或负数表示永久不会超时

7.6、最后服务端处理会话的时间

  • HttpSession.getLastAccessedTime 最后获取会话时间

7.7、最重要Session语法

7.7.1、线程问题

  • 多个servlet同时获取相同的session数据,不会有线程安全问题

7.7.2、分布式环境

  • 容器必须可解析序列化(Serializable)对象
  • 容器可以在HttpSession选择存储部分关键引用信息,比如事务和bean的引用
  • session转移需要通知到其他servlet ( 其他servlet必须要实现HttpSessionActivationListener接口)
  • 也要考虑多个JVM环境

7.7.3、客户语法

  • 考虑兼容性,开发必须假定所有窗口参与同一会话情况
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值