会话技术

一 会话技术简介

会话: 一次会话中包含多次请求和响应

一次会话: 客户端第一次给服务器发送请求 会话建立 直到有一方断开为止

功能: 在一次会话范围内的多次请求间 共享数据

方式: 客户端会话技术Cookie 服务端会话技术Session

 

二 Cookie

客户端会话技术 将数据保存到客户端

1. 快速入门

a. 创建Cookie 绑定数据

  new Cookie(String name, String value)

b. 发送Cookie

  HttpServletResponse#addCookie(Cookie cookie)

c. 获取Cookie 拿到数据

  HttpServletRequest#getCookies() -> Cookie[]

2. 实现原理

基于响应头Set-Cookie和请求头Cookie实现

会话技术_第1张图片

3. Cookie细节

a. 可以创建多个Cookie对象 使用response多次调用addCookie() 发送多个Cookie

b. 默认情况下 当客户端关闭后 Cookie数据被销毁 使用Cookie#setMaxAge(int expiry) 可以持久化存储 expiry=负数是默认值 expiry=0是删除Cookie信息 expiry=正数是存活时间(单位秒)

c. 在tomcat8之前 Cookie不支持中文数据 在tomcat8之后 Cookie支持中文数据 但是特殊字符还是不支持 所以建议都使用URL编码存储

d. Cookie共享问题

  1> 在一个tomcat服务器中 部署了多个web项目 默认情况下Cookie不能共享 使用Cookie#setPath("/") 可以共享Cookie

  2> 不同tomcat服务器间 默认情况下Cookie不能共享 使用Cookie#setDomain(".qq.com") 可以共享Cookie(一级域名必须相同)

4. Cookie特点

a. Cookie存储数据在客户端

b. 浏览器对于单个Cookie的大小有限制(4kb) 以及对同一个域名下的总Cookie数量也有限制(20个)

5. Cookie功能

a. Cookie一般用于存储少量的不太敏感的数据

b. 在不登录的情况下 完成服务器对客户端的身份识别

 

三 Session

服务端会话技术 将数据保存到服务端

1. 快速入门

a. 获取HttpSession

  HttpServletRequest#getSession() -> HttpSession

b. 使用HttpSession

  存储数据 void setAttribute(String name, Object value)

  通过键获取值 Object getAttribute(String name)

  通过键移除值 void removeAttribute(String name)

2. 实现原理

Session的实现依赖于Cookie

会话技术_第2张图片

3. Session细节

a. 当客户端关闭后 服务器不关闭 两次获取Session 默认情况下不是同一个 如果需要相同 可以创建Cookie("JSESSIONID", session.getId()) 设置最大存活时间 让Cookie持久化保存

b. 当客户端不关闭 服务器关闭后 两次获取Session 不是同一个 但是要确保数据不丢失 tomcat自动完成以下工作

  1> Session钝化: 在服务器正常关闭之前 将Session对象序列化到硬盘上

  2> Session活化: 在服务器启动后 将Session文件转化为内存中的Session对象

c. Session什么时候被销毁

  1> 服务器关闭

  2> Session#invalidate()

  3> Session默认失效时间是30分钟 可以选择性配置修改 在tomcat/conf/web.xml中 节点下

4. Session特点

a. Session存储数据在服务端

b. Session可以存储任意类型 任意大小的数据

5. Session功能

a. 共享数据

域对象: 一个有作用范围的对象 可以在范围内共享数据

Session域: 代表一次会话的范围

  存储数据 void setAttribute(String name, Object obj)

  通过键获取值 Object getAttribute(String name)

  通过键移除值 void removeAttribute(String name)

 

你可能感兴趣的:(会话技术)