web - 会话技术

文章目录

目录

文章目录

前言

一 . 会话

1.1 会话管理概述

1.2 会话管理实现手段

二 . Cookie

2.1 cookie概述

2.2 cookie的使用

2.3 Cookie的时效性

2.4 Cookie的提交路径

三 . Session

3.1 HttpSession概述

3.2 HttpSession的使用

3.3 HttpSession时效性

四 . 三大域对象

4.1 概述

4.2 域对象的使用

总结


前言

大家好,今天给大家介绍一下web中的会话技术


一 . 会话

1.1 会话管理概述

Web会话管理技术是指在Web应用程序中管理用户会话的技术。它允许Web应用程序在多个页面或请求之间保持用户的状态信息

为什么需要会话管理?

我们都知道网络之间进行通信使用的是HTTP协议,但是HTTP协议是无状态的,也就是说每个请求和响应都是独立的,服务器不会保留之前请求或响应的状态信息。这意味着在HTTP协议的级别上,服务器无法识别不同请求来自同一用户还是不同用户。

这是一个很严重的问题

为了解决这个问题Web应用程序使用会话管理技术来跟踪用户的状态。会话管理技术通过在HTTP协议之上引入额外的机制来实现会话的持久化处理。例如,使用Cookie或URL重写来在每个请求中传递会话ID,服务器使用这个ID来识别用户并存储相关的会话数据。


1.2 会话管理实现手段

Cookie和Session配合解决

  • cookie是在客户端保留少量数据的技术,主要通过响应头向客户端响应一些客户端要保留的信息

  • session是在服务端保留更多数据的技术,主要通过HttpSession对象保存一些和客户端相关的信息

  • cookie和session配合记录请求状态

举例: 张三去银行办业务

  • 张三第一次去某个银行办业务,银行会为张三开户(Session),并向张三发放一张银行卡(cookie)

  • 张三后面每次去银行,就可以携带之间的银行卡(cookie),银行根据银行卡找到之前张三的账户(session)


二 . Cookie

2.1 cookie概述

Cookie是一种在Web浏览器和服务器之间传递的小型文本文件。它由服务器在HTTP响应中发送给浏览器,并由浏览器存储在用户的计算机上。每当浏览器向服务器发送请求时,它会自动将相应的Cookie包含在请求中。

Cookie通常用于在Web应用程序中跟踪和识别用户。通过存储在Cookie中的信息,服务器可以识别特定用户并提供个性化的服务。例如,Cookie可以用于记录用户的登录状态、购物车内容、用户首选项等。

cookie的产生

  • 服务端创建cookie,将cookie放入响应对象中,Tomcat容器将cookie转化为set-cookie响应头,响应给客户端

  • 客户端在收到cookie的响应头时,在下次请求该服务的资源时,会以cookie请求头的形式携带之前收到的Cookie

  • cookie是一种键值对格式的数据,从tomcat8.5开始可以保存中文,但是不推荐

  • 由于cookie是存储于客户端的数据,比较容易暴露,一般不存储一些敏感或者影响安全的数据

web - 会话技术_第1张图片

cookie中包含的信息

  1. 名称:Cookie的名称,用于在服务器端识别和访问它。

  2. 值:与Cookie相关联的值,存储在用户计算机上。

  3. 域:指定可以访问Cookie的域名。只有与域匹配的网站才能访问该Cookie。

  4. 路径:指定可以访问Cookie的路径。只有与路径匹配的页面才能访问该Cookie。

  5. 过期时间:指定Cookie的有效期。过期时间之后,浏览器将不再发送该Cookie。

  6. 安全标志:指示浏览器仅在使用安全连接(HTTPS)时才发送Cookie。


2.2 cookie的使用

准备servletA 和 ServletB

web - 会话技术_第2张图片

web - 会话技术_第3张图片

开始测试: servletA 用于给浏览器设置cookie

web - 会话技术_第4张图片

开始测试servletB 看看能不能取到cookie

web - 会话技术_第5张图片


2.3 Cookie的时效性

默认情况下Cookie的有效期是一次会话范围内,我们可以通过cookie的setMaxAge()方法让Cookie持久化保存到浏览器上

  • 会话级Cookie

    • 服务器端并没有明确指定Cookie的存在时间

    • 在浏览器端,Cookie数据存在于内存中

    • 只要浏览器还开着,Cookie数据就一直都在

    • 浏览器关闭,内存中的Cookie数据就会被释放

  • 持久化Cookie

    • 服务器端明确设置了Cookie的存在时间

    • 在浏览器端,Cookie数据会被保存到硬盘上

    • Cookie在硬盘上存在的时间根据服务器端限定的时间来管控,不受浏览器关闭的影响

    • 持久化Cookie到达了预设的时间会被释放

cookie.setMaxAge(int expiry)参数单位是秒,表示cookie的持久化时间,如果设置参数为0,表示将浏览器中保存的该cookie删除

web - 会话技术_第6张图片 

2.4 Cookie的提交路径

访问互联网资源时不能每次都需要把所有Cookie带上。访问不同的资源时,可以携带不同的cookie,我们可以通过cookie的setPath(String path) 对cookie的路径进行设置

web - 会话技术_第7张图片

 看看我们的控制台

web - 会话技术_第8张图片

如果我们想要将我们设置的cookie只能访问指定路径,就需要我们设置 Cookie的提交路径

web - 会话技术_第9张图片

 我们正常访问servletB是携带改cookie的

 此时如果我们在创建一个servletC,我们看看还有没有这个cookie

web - 会话技术_第10张图片

web - 会话技术_第11张图片


三 . Session

3.1 HttpSession概述

HttpSession是一种保留更多信息在服务端的一种技术,服务器会为每一个客户端开辟一块内存空间,即session对象. 客户端在发送请求时,都可以使用自己的session. 这样服务端就可以通过session来记录某个客户端的状态了

  • 服务端在为客户端创建session时,会同时将session对象的id,即JSESSIONID以cookie的形式放入响应对象

  • 后端创建完session后,客户端会收到一个特殊的cookie,叫做JSESSIONID

  • 客户端下一次请求时携带JSESSIONID,后端收到后,根据JSESSIONID找到对应的session对象

  • 通过该机制,服务端通过session就可以存储一些专门针对某个客户端的信息了

web - 会话技术_第12张图片

3.2 HttpSession的使用

定义表单

web - 会话技术_第13张图片

 定义类servletA 和 servletB

web - 会话技术_第14张图片

web - 会话技术_第15张图片

 开始测试 访问 http://lcoalhost:8080/index.html

web - 会话技术_第16张图片

控制台输出

 访问servletB

web - 会话技术_第17张图片

getSession方法的处理逻辑  

web - 会话技术_第18张图片

 

3.3 HttpSession时效性

为什么要设置session的时效

  • 用户量很大之后,Session对象相应的也要创建很多。如果一味创建不释放,那么服务器端的内存迟早要被耗尽。

  • 客户端关闭行为无法被服务端直接侦测,或者客户端较长时间不操作也经常出现,类似这些的情况,就需要对session的时限进行设置了

默认的session最大闲置时间(两次使用同一个session中的间隔时间) 在tomcat/conf/web.xml配置为30分钟

web - 会话技术_第19张图片 

我们可以自己在当前项目的web.xml对最大闲置时间进行重新设定

web - 会话技术_第20张图片 

也可以通过HttpSession的API 对最大闲置时间进行设定

 设置最大闲置时间 session.setMaxInactiveInterval(60);

也可以直接让session失效

 session.invalidate();


四 . 三大域对象

4.1 概述

在Java Web开发中,有三个重要的域对象用于在不同的范围内存储和共享数据。这三个域对象是:

  • 请求域(Request Scope):请求域是在一次HTTP请求过程中有效的域对象。它用于在同一个请求的不同组件(如Servlet、JSP)之间传递数据。数据存储在请求对象中,可以通过请求对象的setAttribute()和getAttribute()方法来设置和获取数据。请求域的生命周期从请求开始到响应结束。

web - 会话技术_第21张图片

  • 会话域(Session Scope):会话域是在用户会话期间有效的域对象。它用于在同一个用户的不同请求之间共享数据。数据存储在会话对象中,可以通过会话对象的setAttribute()和getAttribute()方法来设置和获取数据。会话域的生命周期从用户登录到用户注销或会话过期。

web - 会话技术_第22张图片

  • 应用程序域(Application Scope):应用程序域是在整个应用程序生命周期中有效的域对象。它用于在整个应用程序的不同组件之间共享数据。数据存储在应用程序对象中,可以通过应用程序对象的setAttribute()和getAttribute()方法来设置和获取数据。应用程序域的生命周期从应用程序启动到应用程序关闭。

web - 会话技术_第23张图片

web - 会话技术_第24张图片 


4.2 域对象的使用

域对象的API

API 功能
void setAttribute(String name,String value) 向域对象中添加/修改数据
Object getAttribute(String name); 从域对象中获取数据
removeAttribute(String name); 移除域对象中的数据

 使用场景

  • 请求转发时,请求域可以传递数据请求域内一般放本次请求业务有关的数据,如:查询到的所有的部门信息

  • 同一个会话内,不用请求转发,会话域可以传递数据会话域内一般放本次会话的客户端有关的数据,如:当前客户端登录的用户

  • 同一个APP内,不同的客户端,应用域可以传递数据应用域内一般放本程序应用有关的数据 如:Spring框架的IOC容器


总结

这篇博客给大家介绍了会话中的cookie,session以及域对象的相关知识,望大家多多支持

你可能感兴趣的:(javaweb,后端,java)