会话技术(Cookie、Session)讲解


会话

一、 会话技术的概述

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

在这里插入图片描述

二、会话技术的实现原理

1. 会话技术的分类

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

2. 会话技术的实现原理

在这里插入图片描述
在这里插入图片描述


Cookie

一、Cookie 的分类

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

二、Cookie 的 API 的概述

1. 构造方法

  • Cookie(String name, String value)

2. 其他方法

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

三、Cookie 的使用细节

  • 一个 Cookie 只能一种标识信息,至少含有一个标识该信息的名称和值;
  • 一个 web 站点可以给一个浏览器发送多个 cookie;
    一个 web 浏览器可以存储多个 web 站点的 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

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

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

  • Session 作为域对象,作用范围就是一次会话的范围;
  • 一次会话,指的是用户打开浏览器点击多个超链接,访问服务器资源,到最后关闭浏览器的过程;

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)
作用范围 一次请求(转发就是一次请求) 一次会话(多次请求) 整个应用

猜你喜欢

转载自blog.csdn.net/pary__for/article/details/111403854
今日推荐