文章目录
- 会话
- 一、 会话技术的概述
- 二、会话技术的实现原理
- 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 资源,然后关闭浏览器,整个过程称为是一次会话;
- 使用会话技术的原因:每个用户与服务器交互,都会产生各自的数据;程序想将这些数据进行保存,就要使用会话技术;
二、会话技术的实现原理
1. 会话技术的分类
- Cookie 技术
是客户端技术,程序把每个用户的数据以 cookie 的形式保存到各自的浏览器中;当用户使用浏览器再次访问服务器中的 web 资源时,就会带着各自的数据过去; - Session 技术
是服务器端技术,服务器在运行时为每一个用户的浏览器创建一个独享的 Session 对象;用户访问服务器时,可以把各自的数据放到各自的 Session 中,当用户再次访问服务器中的 web 资源时,其他 web 资源再从用户各自的 Session 中取出数据为用户服务;
2. 会话技术的实现原理
3. 记录用户上次访问时间
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) |
作用范围 | 一次请求(转发就是一次请求) | 一次会话(多次请求) | 整个应用 |