目录
文章目录
前言
一 . 会话
1.1 会话管理概述
1.2 会话管理实现手段
二 . Cookie
2.3 Cookie的时效性
2.4 Cookie的提交路径
三 . Session
3.1 HttpSession概述
3.2 HttpSession的使用
3.3 HttpSession时效性
四 . 三大域对象
4.1 概述
4.2 域对象的使用
总结
大家好,今天给大家介绍一下web中的会话技术
Web会话管理技术是指在Web应用程序中管理用户会话的技术。它允许Web应用程序在多个页面或请求之间保持用户的状态信息。
为什么需要会话管理?
我们都知道网络之间进行通信使用的是HTTP协议,但是HTTP协议是无状态的,也就是说每个请求和响应都是独立的,服务器不会保留之前请求或响应的状态信息。这意味着在HTTP协议的级别上,服务器无法识别不同请求来自同一用户还是不同用户。
这是一个很严重的问题
为了解决这个问题,Web应用程序使用会话管理技术来跟踪用户的状态。会话管理技术通过在HTTP协议之上引入额外的机制来实现会话的持久化处理。例如,使用Cookie或URL重写来在每个请求中传递会话ID,服务器使用这个ID来识别用户并存储相关的会话数据。
Cookie和Session配合解决
cookie是在客户端保留少量数据的技术,主要通过响应头向客户端响应一些客户端要保留的信息
session是在服务端保留更多数据的技术,主要通过HttpSession对象保存一些和客户端相关的信息
cookie和session配合记录请求状态
举例: 张三去银行办业务
张三第一次去某个银行办业务,银行会为张三开户(Session),并向张三发放一张银行卡(cookie)
张三后面每次去银行,就可以携带之间的银行卡(cookie),银行根据银行卡找到之前张三的账户(session)
Cookie是一种在Web浏览器和服务器之间传递的小型文本文件。它由服务器在HTTP响应中发送给浏览器,并由浏览器存储在用户的计算机上。每当浏览器向服务器发送请求时,它会自动将相应的Cookie包含在请求中。
Cookie通常用于在Web应用程序中跟踪和识别用户。通过存储在Cookie中的信息,服务器可以识别特定用户并提供个性化的服务。例如,Cookie可以用于记录用户的登录状态、购物车内容、用户首选项等。
cookie的产生
服务端创建cookie,将cookie放入响应对象中,Tomcat容器将cookie转化为set-cookie响应头,响应给客户端
客户端在收到cookie的响应头时,在下次请求该服务的资源时,会以cookie请求头的形式携带之前收到的Cookie
cookie是一种键值对格式的数据,从tomcat8.5开始可以保存中文,但是不推荐
由于cookie是存储于客户端的数据,比较容易暴露,一般不存储一些敏感或者影响安全的数据
cookie中包含的信息
名称:Cookie的名称,用于在服务器端识别和访问它。
值:与Cookie相关联的值,存储在用户计算机上。
域:指定可以访问Cookie的域名。只有与域匹配的网站才能访问该Cookie。
路径:指定可以访问Cookie的路径。只有与路径匹配的页面才能访问该Cookie。
过期时间:指定Cookie的有效期。过期时间之后,浏览器将不再发送该Cookie。
安全标志:指示浏览器仅在使用安全连接(HTTPS)时才发送Cookie。
准备servletA 和 ServletB
开始测试: servletA 用于给浏览器设置cookie
开始测试servletB 看看能不能取到cookie
默认情况下Cookie的有效期是一次会话范围内,我们可以通过cookie的setMaxAge()方法让Cookie持久化保存到浏览器上
会话级Cookie
服务器端并没有明确指定Cookie的存在时间
在浏览器端,Cookie数据存在于内存中
只要浏览器还开着,Cookie数据就一直都在
浏览器关闭,内存中的Cookie数据就会被释放
持久化Cookie
服务器端明确设置了Cookie的存在时间
在浏览器端,Cookie数据会被保存到硬盘上
Cookie在硬盘上存在的时间根据服务器端限定的时间来管控,不受浏览器关闭的影响
持久化Cookie到达了预设的时间会被释放
cookie.setMaxAge(int expiry)参数单位是秒,表示cookie的持久化时间,如果设置参数为0,表示将浏览器中保存的该cookie删除
访问互联网资源时不能每次都需要把所有Cookie带上。访问不同的资源时,可以携带不同的cookie,我们可以通过cookie的setPath(String path) 对cookie的路径进行设置
看看我们的控制台
如果我们想要将我们设置的cookie只能访问指定路径,就需要我们设置 Cookie的提交路径
我们正常访问servletB是携带改cookie的
此时如果我们在创建一个servletC,我们看看还有没有这个cookie
HttpSession是一种保留更多信息在服务端的一种技术,服务器会为每一个客户端开辟一块内存空间,即session对象. 客户端在发送请求时,都可以使用自己的session. 这样服务端就可以通过session来记录某个客户端的状态了
服务端在为客户端创建session时,会同时将session对象的id,即JSESSIONID以cookie的形式放入响应对象
后端创建完session后,客户端会收到一个特殊的cookie,叫做JSESSIONID
客户端下一次请求时携带JSESSIONID,后端收到后,根据JSESSIONID找到对应的session对象
通过该机制,服务端通过session就可以存储一些专门针对某个客户端的信息了
定义表单
定义类servletA 和 servletB
开始测试 访问 http://lcoalhost:8080/index.html
控制台输出
访问servletB
getSession方法的处理逻辑
为什么要设置session的时效
用户量很大之后,Session对象相应的也要创建很多。如果一味创建不释放,那么服务器端的内存迟早要被耗尽。
客户端关闭行为无法被服务端直接侦测,或者客户端较长时间不操作也经常出现,类似这些的情况,就需要对session的时限进行设置了
默认的session最大闲置时间(两次使用同一个session中的间隔时间) 在tomcat/conf/web.xml配置为30分钟
我们可以自己在当前项目的web.xml对最大闲置时间进行重新设定
也可以通过HttpSession的API 对最大闲置时间进行设定
设置最大闲置时间 session.setMaxInactiveInterval(60);
也可以直接让session失效
session.invalidate();
在Java Web开发中,有三个重要的域对象用于在不同的范围内存储和共享数据。这三个域对象是:
请求域(Request Scope):请求域是在一次HTTP请求过程中有效的域对象。它用于在同一个请求的不同组件(如Servlet、JSP)之间传递数据。数据存储在请求对象中,可以通过请求对象的setAttribute()和getAttribute()方法来设置和获取数据。请求域的生命周期从请求开始到响应结束。
会话域(Session Scope):会话域是在用户会话期间有效的域对象。它用于在同一个用户的不同请求之间共享数据。数据存储在会话对象中,可以通过会话对象的setAttribute()和getAttribute()方法来设置和获取数据。会话域的生命周期从用户登录到用户注销或会话过期。
应用程序域(Application Scope):应用程序域是在整个应用程序生命周期中有效的域对象。它用于在整个应用程序的不同组件之间共享数据。数据存储在应用程序对象中,可以通过应用程序对象的setAttribute()和getAttribute()方法来设置和获取数据。应用程序域的生命周期从应用程序启动到应用程序关闭。
域对象的API
API | 功能 |
---|---|
void setAttribute(String name,String value) | 向域对象中添加/修改数据 |
Object getAttribute(String name); | 从域对象中获取数据 |
removeAttribute(String name); | 移除域对象中的数据 |
使用场景
请求转发时,请求域可以传递数据请求域内一般放本次请求业务有关的数据,如:查询到的所有的部门信息
同一个会话内,不用请求转发,会话域可以传递数据会话域内一般放本次会话的客户端有关的数据,如:当前客户端登录的用户
同一个APP内,不同的客户端,应用域可以传递数据应用域内一般放本程序应用有关的数据 如:Spring框架的IOC容器
这篇博客给大家介绍了会话中的cookie,session以及域对象的相关知识,望大家多多支持