文章目录

  • 会话
  • 一、 会话技术的概述
  • 二、会话技术的实现原理
  • 1. 会话技术的分类
  • 2. 会话技术的实现原理
  • 3. 记录用户上次访问时间
  • Cookie
  • 一、Cookie 的分类
  • 二、Cookie 的 API 的概述
  • 1. Cookie 的使用步骤
  • 2. 实现原理
  • 3. Cookie 在浏览器中的保存时间
  • 4. Cookie 共享问题
  • 5. 构造方法
  • 6. 其他方法
  • 三、Cookie 的使用细节
  • Session
  • 一、Session 的概述
  • 1. Session 是什么
  • 2. 为什么有 Cookie 还要有 Session
  • 3. Session 如何保存用户数据
  • 二、Session 的原理
  • 三、Session 作为域对象存取数据
  • 1. Session 作为域对象的 API
  • 2. Session 作为域对象的作用范围
  • Servlet 的数据访问范围的总结(Servlet 的域对象的总结)



会话

一、 会话技术的概述

  • 用户打开一个浏览器,点击多个超链接访问服务器的 web 资源,然后关闭浏览器,整个过程称为是一次会话
  • 使用会话技术的原因:每个用户与服务器交互,都会产生各自的数据;程序想将这些数据进行保存,就要使用会话技术;

JavaSession维护一个会话的过程 java会话技术_数据

二、会话技术的实现原理

1. 会话技术的分类

  • Cookie 技术
    客户端技术,程序把每个用户的数据以 cookie 的形式保存到各自的浏览器中;当用户使用浏览器再次访问服务器中的 web 资源时,就会带着各自的数据过去;
  • Session 技术
    服务器端技术,服务器在运行时为每一个用户的浏览器创建一个独享的 Session 对象;用户访问服务器时,可以把各自的数据放到各自的 Session 中,当用户再次访问服务器中的 web 资源时,其他 web 资源再从用户各自的 Session 中取出数据为用户服务;

2. 会话技术的实现原理

JavaSession维护一个会话的过程 java会话技术_服务器_02


JavaSession维护一个会话的过程 java会话技术_服务器_03

3. 记录用户上次访问时间

JavaSession维护一个会话的过程 java会话技术_会话_04


Cookie

一、Cookie 的分类

  • 默认级别的 Cookie
  • 没有设置有效时间的 Cookie;
  • 默认情况下只要关闭了浏览器,Cookie 也会被销毁;(Cookie 存在于浏览器的内存中);
  • 持久级别的 Cookie
  • 设置了有效时间的 Cookie;
  • 这种 Cookie 的内容不是保存在浏览器的内存中;(Cookie 的内容保存在硬盘上);
  • 关闭浏览器,再次打开时浏览器会加载硬盘上的文件,Cookie 的数据不会丢失;

二、Cookie 的 API 的概述

1. Cookie 的使用步骤

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

2. 实现原理

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

3. Cookie 在浏览器中的保存时间

  • 默认情况下,当浏览器关闭后,Cookie数据被销毁
  • 持久化存储。setMaxAge(int seconds)
  • 正数:将 Cookie 数据写入到硬盘,持久化存储 Cookie 的存活时间;
  • 负数:默认值;
  • 零:删除 Cookie 信息。

4. Cookie 共享问题

  • 假设在一个 tomcat 服务器中,有多个 web 项目,在这些 web 项目中的 cookie 能否共享
  • 不同的 tomcat 服务期之间的 cookie 能否共享?

5. 构造方法

Cookie(String name, String value)

6. 其他方法

  • 获得 Cookie 的名称的方法;getName()
  • 获得 Cookie 的值的方法;getValue()
  • 获得 Cookie 的有效域名;setDonain(String pattern)
  • 设置 Cookie 的有效路径;setPath(String uri)
  • 设置 Cookie 的有效时长;setMaxAge(int expiry)

三、Cookie 的使用细节

  • 一个 Cookie 只能一种标识信息,至少含有一个标识该信息的名称和值;
  • 一个 web 站点可以给一个浏览器发送多个 cookie;
    一个 web 浏览器可以存储多个 web 站点的 cookie;
  • 浏览器存放的 Cookie 的大小和个数是有限制的
  • 如果创建了一个 Cookie,并发送到浏览器,默认情况下它是一个会话级别的 Cookie
  • cookie 一般用于存储少量的不太敏感的数据;
  • 在不登陆的情况下,完成服务器对客户端的身份识别;

Session

一、Session 的概述

1. Session 是什么

  • Session 称为是一次会话,Cookie 将用户产生的私有数据保存到浏览器端Session 将用户产生的私有数据保存到服务器端
  • 一个浏览器独占一个 Session 对象;
  • 需要在保存用户数据的时候,服务器程序可以将用户数据写到 Session 对象中,当用户使用浏览器访问其他程序时,其他程序可以从用户的 session 中取出该用户的数据,为用户服务;

2. 为什么有 Cookie 还要有 Session

Cookie

Session

保存的数据有大小和数量限制

没有个数和大小限制

数据是保存到客户端浏览器上的(不是很安全)

数据保存在服务器上(相对安全)

3. Session 如何保存用户数据

  • Session 对象由服务器创建,开发人员可以调用 request 对象的 getSession 方法得到 Session 对象;

二、Session 的原理

  • 服务器是如何实现一个 session 为一个用户浏览器服务的
  • Session 的实现原理
    基于 Cookie 的,基于 Cookie 回写了一个 Session 的ID;

三、Session 作为域对象存取数据

1. Session 作为域对象的 API

  • 向 session 中存入数据;setAttribute(String name, String value)
  • 从 session 域中获取数据;getAttribute(String name)
  • 从 session 域中移除数据;removeAttribute(String name)

2. Session 作为域对象的作用范围

  • Session 作为域对象,作用范围就是一次会话的范围;
  • 一次会话,指的是用户打开浏览器点击多个超链接,访问服务器资源,到最后关闭浏览器的过程;
  • session可以存储任意类型,任意大小的数据;
  • 适合于保存购物信息、用户登录信息、验证码等。

Servlet 的数据访问范围的总结(Servlet 的域对象的总结)

请求范围(ServletRequest)

会话范围(HTTPSession)

应用范围(ServletContext)

何时创建

当用户向服务器发送一次请求,服务器创建一个 request 对象

服务器端第一次调用 getSession() 方法时创建

服务器启动时创建,为每个 web 项目创建一个单独的 ServletContext 对象

何时销毁

当服务器对这次请求做出了响应,服务器会销毁这个 request 对象

三种情况:①Session 过期,默认过期时间为30分钟;②非正常关闭服务器;③手动调用 session.invalidate();

服务器关闭的时候,或者项目从服务器中移除的时候

如何存数据

void setAttribute(String name, String value)

void setAttribute(String name, String value)

void setAttribute(String name, String value)

如何取数据

Object getAttribute(String name)

Object getAttribute(String name)

Object getAttribute(String name)

作用范围

一次请求(转发就是一次请求)

一次会话(多次请求)

整个应用