JavaWeb学习笔记(三)【会话】

216 阅读3分钟

会话技术(Cookie / Session)

概述:

  1. 会话:一次会话中包含多次请求和响应
    • 一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到一方断开为止。
  2. 功能:在一次会话范围内的多次请求间,共享数据
  3. 方式:
    • 客户端会话技术:Cookie(译作:小甜点)
    • 服务端会话技术:Session(译作:主菜)
  4. 区别
    1. Session存储数据在服务器端,Cookie在客户端
    2. Session没有数据大小限制,Cookie有
    3. Session数据安全,Cookie相对于不安全

Cookie:

1 概念

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

2 快速入门

  • 使用步骤
    1. 创建Cookie对象,绑定数据
      • new Cookie(String name, String value)
    2. 发送Cookie对象
      • response.addCookie(Cookie cookie)
    3. 获取Cookie,拿到数据
      • Cookie[] request.getCookies()

3 实现原理

  • 基于HTTP请求响应头set-cookie和请求头cookie实现的

4 Cookie细节

  1. 一次可不可以发送多个cookie请求?

    可以创建多个cookie对象,是用response.addCookie方法发送cookie即可

  2. cookie在浏览器可以保存多长时间?

    • 默认情况下,浏览器关闭后,Cookie被销毁
    • 持久化存储: setMaxAge(int seconds)
      1. 正数:将Cookie数据写到硬盘的文件。持久化储存。大小表示cookie存活时间。
      2. 负数:默认值
      3. 0:删除Cookie信息
  3. cookie能不能存中文?

    • tomcat 8之前,cookie中不能直接存储中文数据, 需要将中文编码转码,一般使用URL编码
    • tomcat 8之后,cookie支持中文数据
  4. cookie共享问题?

    1. 假设在一个tomcat服务器中,部署了多个WEB项目,那么在这些web中,cookie能否共享?

      • 默认情况下cookie不能共享
      • setPath(String path):设置cookie的获取范围,默认设置当前的虚拟目录
        • 如果要共享,则可以将path设置为目标路径
    2. 不同的tomcat服务器间cookie共享问题?

      • setDomain(String path):如果设计一级域名相同,那么多个服务器之间cookie可以共享
      • setDomain(“baidu.com”),那么tieba.baidu.com和news.baidu.com中的cookie可以共享

5 Cookie的特点

  1. cookie数据存在客户端浏览器
  2. 浏览器对于单个cookie的大小有限制(一般为4kb左右)
  3. 浏览器对于同一个域名下的cookie数量也有限制(一般在20个以内)

6 Cookie的作用

  1. cookie一般用于存储少量的不太敏感的数据
  2. 在不登陆的情况下,完成服务器对客户端的身份识别

Session

1 概念

服务器端会话技术,再一次会话的多次请求间共享数据,将数据保存到服务器端的对象中。HttpSession

2 快速入门

  1. 获取Session对象 request.getSession()
  2. 使用Session对象 HttpSession对象:
    • Object getAttribute(String name)
    • void setAttribute(String name, Object value)
    • void removeAttribute(String name)

3 Session原理

  • Session的实现是依赖于Cookie的!

4 细节

  1. 当客户端关闭后,服务器不关闭,两次获取的session是否为同一个?
    • 默认情况下不是(关闭服务器,会话结束)
    • 如果需要相同,可以设置Cookie,键为JSESSIONID,设置最大存活时间,让cookie持久化储存
  2. 客户端不关闭,服务器关闭,两次获取的session是否为同一个?
    • 不是同一个,但是要确保数据不丢失
      • Session的钝化:
        • 在服务器正常关闭之前,将Session对象序列化到硬盘上
        • Session的活化:
        • 在服务器启动后,将Session文件转化为内存中的session对象即可。
  3. Session什么时候被销毁
    1. 服务器关闭
    2. 自杀:session对象调用 invalidate().
    3. 默认时间:30分钟(Tomcat可配置) 找到
      <session-config> <session-timeout>30</session-timeout> </session-config>

5 Session的特点

  • session用于存储一次会话间的多次请求的数据,存储在服务器端
  • session可以存储任意类型,任意大小的数据