web实操8-cookie

embedded/2024/12/23 23:17:08/

会话技术

会话:

一次会话中包含多次请求和响应。

客户端浏览器访问服务器的资源,只要客户端或者服务器端不关闭,这始终在一次会话范围内,这一次会话范围内可以包含多次请求并且收到多次相应。

一次会话:浏览器第一次给服务器资源发送请求,会话建立,直到有一方断开为止。

功能

在一次会话的范围内的多次请求间,共享数据。

解释:
http协议是无状态的,无状态:客户端发送了多次请求,服务器给力我多次响应,每次请求响应和其他请求响应是相互独立的,他们之间并不能进行数据的交流和交换,我们想进行数据的交流和交换怎么办,只能使用会话技术解决。

举例演示:
京东每次加入购物车都是一次请求,最后购物车结算可以汇集这些请求结果算出总金额。

方式

客户端会话技术(把数据存在客户端的):cookie
服务器端会话技术(把数据存在服务端的):session

cookie

概念:

客户端会话技术,将数据保存在客户端。

解释:
第一次请求服务器请求完成,服务器会携带一些数据响应给浏览器,浏览器把这些数据保存在浏览器本地,下一次请求,他会把这些数据带着发送给服务器。

快速入门

使用步骤:

1)创建cookie对象(cooike是一个类),绑定数据
new Cookie(String name,String value)

2)发送cookie对象
要通过响应去发,应该找response对象的API:
response.addCookie(Cookie cookie)
接收cookie对象,上面new的加进去,相当于通过response发送cookie给浏览器,浏览器收到cookie后会存储,下一次会自动带着cookie去请求,我们就可以再一次获取cookie了。
3)获取cookie 拿到数据
获取肯定是在请求里携带,应该找request的API
因为可能会有多个cookie的存在,这里返回是cookie数组
Cookie[] = request.getCookies()
拿到所有cookie,遍历打印获取1)带过去的数据。

代码演示

cookie原理

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

解释说明

不管发送cookie还是获取cookie对象,最终他们体现形式都是以http的协议在进行数据的交互,一定是底层通过http协议的响应和请求来完成的。

在这里插入图片描述

response会给弄个响应头set-cookie:msg=hello
浏览器发现有这么一个响应头,http协议里面响应头规定了,如果浏览器收到一个setCookie头,浏览器会自动干一件事,会将这个头里面携带的数据msg =hello 保存在客户端浏览器中,并且下一次再次发送请求,浏览器会将这个数据带过去。

带过去:
浏览器请求时,在请求的消息头里面弄个请求头:cookie:msg=hello
在服务器这边,可以写代码获取请求头里面的数据,只不过我们使用的是java web给我们封装好的API来做的这么一个操作,不需要我们自己再去单独针对这个请求头操作了。

所以服务器,http协议,浏览器帮我们做了很多的事,我们要关注的非常少,只需要通过API发送和获取cookie。

通过抓包来看

cookie细节

cookie一些操作规则和一些cookie常用的API。

一次可不可以发送多个cookie

可以。可以创建多个cookie对象,使用response调用多次addCOokie方法发送cookie即可。

发送时:创建两个对象,response.add两次
响应头:两个
set-cookie:msg=zhangsan
set-cookie: name=zhangsan

请求头:用逗号隔开
cookie:msg=hello,name=zhangsan

注意⚠️:只要有一个response带上cookie,浏览器存储了之后,浏览器再访问任何一个服务器路径都会带上cookie。不是说传过来的那个路径访问就不带了。

cookie在浏览器中保存多长时间

1)默认情况下,当浏览器关闭后,cookie数据被销毁。

相当于cookie信息保存在浏览器的内存里,浏览器关了内存被释放了,cookie数据也就没了。

演示:
访问demo1,cookie信息存到浏览器,再访问demo2,服务器会获取到cookie信息。
这时候给浏览器关闭,再去直接访问demo2,服务器获取不到cookie信息了。

2)通过设置cookie的生命周期让cookie持久化存储:

通过cookie对象的方法:setMaxAge(int second )
传正数:将cookie数据写到硬盘的文件中,持久化存储。second秒数是cookie的存活时间,到这个时间后,cookie文件会被自动删除掉。
传负数:默认值,浏览器内存里,浏览器关闭就没了。
传零:代表删除cookie信息,因为服务器不能直接操作用户电脑上的数据,只有通过这种方式把cookie删除掉。

我们经常希望浏览器关闭也可以保存下来,内存中数据怎么保存下来:
在硬盘上文件里的数据可以被持久化存储。

演示:

3)cookie能不能存储中文数据?

tomcat8之前不能直接存储中文数据,会报错。需要将中文数据转码,一般采用url编码。
tomcat8之后,支持存储中文数据。

4)cookie获取范围多大?

http://www.ppmy.cn/embedded/148194.html

相关文章

借助腾讯云质检平台的新范式,做工业制造企业质检的“AI慧眼”

迅易科技作为腾讯的生态合作伙伴,一直保持着紧密的合作关系,双方在数字化转型领域共同探索、不断创新,希望通过信创产品和国产化解决方案,为国内企业的数字化革新保驾护航。本期将重点聚焦工业质检,深度解析AI质检创新…

SDK 和 REST API 的区别

SDK 和 REST API 的区别 1. 什么是 SDK? SDK(Software Development Kit,软件开发工具包)是一组工具、库、文档和代码示例,用来帮助开发者更容易地与特定的服务或平台集成。SDK 是一个封装好的“工具箱”,…

Git:远程操作

目录 理解分布式版本控制系统 创建远程仓库 克隆远程仓库__HTTPS 克隆远程仓库__SSH 向远程仓库推送 拉取远程仓库 忽略特殊文件 配置命令别名 理解分布式版本控制系统 我们目前所说的所有内容(工作区,暂存区,版本库等等),都是在本地…

第十章:持续反馈管理

持续反馈管理 一、概述 1. 设计目标 本文档旨在设计一个全面的DevOps持续反馈管理系统,覆盖产品需求的完整生命周期,实现从需求设计到运维阶段的全链路问题反馈机制,提高问题发现和解决效率,优化资源利用。 2. 系统定位 建立…

如何在Qt中应用html美化控件

在Qt中应用HTML美化控件,主要可以通过以下几种方式: 使用QWebEngineView:QWebEngineView是基于Chromium引擎的控件,用于显示和交互HTML内容。它支持现代Web标准和技术,如HTML5、CSS3和JavaScript。你可以通过以下步骤…

Javascript面试手撕常见题目(回顾一)

1.JS查找文章中出现频率最高的单词? 要在JavaScript中查找文章中出现频率最高的单词,你可以按照以下步骤进行操作: 将文章转换为小写:这可以确保单词的比较是大小写不敏感的。移除标点符号:标点符号会干扰单词的计数。将文章拆…

【附件】Selenium chromedriver 驱动及浏览器下载

【附件】Selenium chromedriver 驱动及浏览器下载 新版本 CNPM Binaries Mirror 历史版本 CNPM Binaries Mirror 最新版 Chrome for Testing availability

探索 JSON 数据在关系型数据库中的应用:MySQL 与 SQL Server 的对比

随着应用程序对 JSON 数据处理的需求不断增加,许多关系型数据库系统(RDBMS)已逐渐开始原生支持 JSON 数据类型,并提供了丰富的函数和工具来处理 JSON 数据。在这些数据库中,MySQL 和 SQL Server 是最常用的两款数据库系…