Cookie与Session详解与应用

news2024/11/27 18:39:03
White graces:个人主页

🙉专栏推荐:Java入门知识🙉

🐹今日诗词:青山一道同云雨,明月何曾是两乡🐹


目录

Cookie和Session

伪造Cookie

获取Cookie数据

传统方法获取Cookie​编辑

使用注解获取Cookie

设置Session

简介获取Session信息

响应

访问静态页面

访问动态页面

@RestController和@Controller的区别

绝对路径和相对路径

@ResponseBody注解

返回HTML片段

返回Json数据

设置状态码

@RequestMapping注解(重点)

设置Content-Type

设置header

美图分享


⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏

⛳️点赞 ☀️收藏⭐️关注💬卑微小博主🙏


Cookie和Session

HTTP协议是无状态的, 服务器不能持续跟踪用户的请求状态

无状态: 每次请求都是独立的, 相互之间没有任何影响, 就是做那种事之后就翻脸不认人,你是谁, 我们认识吗, 我有npy了.

为了弥补这一缺陷, Cookie和Session就被引入了, 用于帮助服务器跟踪用户状态, 管理用户信息, 身份验证, 会话数据

Cookie是存在客户端的小型文本文件

Session是存在服务器

Cookie用于保存用户信息. 服务器将数据发送给浏览器, 浏览器会将这些数据保存下来并在之后的请求中自动发送回服务器. Cookie 是帮助服务器识别用户和保存用户偏好的一种方式

Session用于存储用户的会话数据,服务器为每个用户创建一个唯一的会话, 并在服务器端存储与该会话相关的信息. 浏览器只保存一个唯一的会话标识符(Session ID),  服务器通过该 ID 来识别和检索对应的会话数据

Cookie和Session数据的特点

Cookie 数据特点:

  • 存储位置:客户端
  • 长期有效:可设置过期时间
  • 安全性较低: 一般存储一些不敏感, 安全性较低的数据, 因此容易被篡改攻击
  • 存储信息类型: 如用户登录状态、偏好设置、网站主题、语言选择等

Session数据特点

  • 存储位置:服务器端
  • 持久性:短期有效
  • 安全性较高
  • 存储信息类型: Session 适合存储用户的敏感数据和复杂的状态信息,如用户身份、购物车信息、权限等。因为数据保存在服务器上,客户端无法直接访问这些信息

伪造Cookie

客户端的安全性不能说是十全十美, 只能说是聊胜于无(通辽语法), 因此十分容易伪造

方法1: Postman伪造

方法2: 通过浏览器伪造

通过Fiddler抓包查看Cookie数据文件

获取Cookie数据

获取Cookie数据有两个接口非常重要, 分别是HttpServletRequest, HttpServletResponse

HttpServletRequest: 接口方法可以获取Http请求的数据

HttpServletResponse: 接口方法可以获取Http响应的数据

传统方法获取Cookie

代码怎么写呢?

获取指定Key对应的Value值

使用注解获取Cookie

获取Cookie也可以通过@CookieValue注解获取Cookie数据的value值

@CookieValue: 从Cookie中获取指定数据的值

设置Session

设置Session一般通过HttpSession接口设置的

首先第一次连接服务器, 服务器会创建一个Session, 不然没有获取个蛋

有了SessionId之后, 后续客户端所有的请求都会带上Cookie

获取Session

也是通过HttpSession接口获取

执行, 发现日志啥也没有

解决办法: 先设置Session, 后面才能获取Session

简介获取Session信息

前面获取信息要写很多接口, 非常麻烦, 所以简介获取Session信息的方式应运而生

不仅如此还能简单获取Session中, "指定"的信息

方法: 通过@SessionAttribute注解

获取header

两种方式获取header, 这里以获取User-Agent为例

User-Agent: 用来标识客户端应用程序、操作系统、设备等信息

响应

访问静态页面

访问静态页面很简单, 只要知道文件在服务器的具体位置就能够访问了

那么如何通过项目访问静态页面呢?

访问动态页面

访问动态页面是通过控制器方法的方式访问页面, 静态访问是通过文件在服务器的地址访问的

@RestController和@Controller的区别

@Controller: 默认返回视图

@RestController: 默认返回数据

绝对路径和相对路径


避免出错, 建议统一使用绝对路径, 加斜杠的

@ResponseBody注解

这个注解既是类注解, 也是方法注解

加在类上, 表示该类下所有方法都返回 数据

加在方法上, 表示该方法返回 数据

返回HTML片段

返回HTML片段, 不是完整的HTML文件, 部分语句而已

返回Json数据

设置状态码

状态码是包含在响应里面, 因此我们可以通过HttpServletResponse接口方法设置状态码


@RequestMapping注解(重点)

这个注解使用频率分非常高, 下面是它的源码: 

  • value: 指定映射的URL
  • method:指定请求的method类型,如GET,POST等
  • Params:指定request中必须包含某些参数值时,才让该⽅法处理
  • headers: 指定request中必须包含某些指定的header值,才能让该⽅法处理请求
  • consumes:指定处理请求(request)的提交内容类型(Content-Type),例如application/json, text/html;
  • produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回

设置Content-Type

我们通过设置produces属性的值,设置响应的报头Content-Type

设置header

header在响应里, 因此可以通过HttpServletResponse接口方法设置

美图分享

✨🎆谢谢你的阅读和耐心!祝愿你在编程的道路上取得更多的成功与喜悦!"🎆✨🎄

⭐️点赞收藏加关注,学习知识不迷路⭐️

🎉✔️💪🎉✔️💪🎉✔️💪🎉✔️💪🎉

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

👍😏⛳️点赞☀️收藏⭐️关注😏👍

🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️🙆‍♂️

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2220567.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【CXL协议-性能注意事项(13)】

13.0 Performance Considerations CXL 为加速器访问系统提供了低延迟、高带宽的路径。CXL 的性能取决于多种因素。表 13-1 列出了 CXL 的主要性能属性。 1.实现的带宽取决于协议和有效载荷大小。CXL.cache 和 CXL.mem 的效率预计为 60-90%。效率与 CXL.io 上的 PCIe* 类似 一…

Git的多人协作模式与企业级开发模型

目录 多人协作一 1.要完成的任务 2.准备操作 3.用户的开发操作 4.merge操作 多人协作二 1.要完成的任务 2.用户的开发操作 3.merge操作 4.解决远程分⽀删除后,本地git branch -a 依然能看到的问题 企业级开发模型 1.了解一些常识 2.系统开发环境…

(Golang)初识Go语言!!为什么选择Go?如何配置Go的开发环境?VS Code如何配置Go环境?

1. Go能做什么? go的优点:运行速度快、并发能力强 Go的应用领域: 区块链应用(BT、分布式账本技术) 后端服务应用 例如: 美团后台流量支撑程序 支撑主站的后台流量(排序、推荐、搜索等&#xf…

芯知识 | NVH-FLASH语音芯片支持平台做语音—打造音频IC技术革新

随着科技的飞速发展,人们对于电子产品的音频性能要求越来越高。在这种背景下,NVH-FLASH系列语音芯片应运而生,作为音频IC领域的一次重大技术革新,NVH-FLASH系列语音芯片凭借其卓越的性能与灵活的支持平台,正逐步引领着…

Java 解决阿里云OSS服务器私有权限图片通过URL无法预览的问题

简单描述一下此场景的业务: 由于系统中需要将上传的图片在系统中展示(private私有权限不能直接通过url直接展示),不想通过先下载下来然后以流的形式返回给前台展示这种方法很不友好,毕竟现在前台展示方式都是通过图片URL进行展示,所以就上官网查看API文档,果然找到了解决…

【数据库】Mysql的锁类型

Mysql中的锁机制主要是为了保证数据的一致性和完整性,在并发的情况下起着至关重要的作用。其中锁的类型主要是分为以下几种: 按照粒度分类 全局锁:对于整个数据库实例进行枷锁,加锁后整个实例就处于只读的状态。局锁通常用于需要…

Gin框架操作指南01:开山篇

Gin是目前最流行,性能最好的的GoWeb框架,几乎成为了学习GoWeb必备的知识。本人最近也在学Gin,在b站搜了很多教程,发现有的教程不够详细,有的教程工具包安装有问题,而官方文档的很多示例代码又不全&#xff…

基于卷积神经网络的中草药识别系统,resnet50,mobilenet模型【pytorch框架+python源码】

更多目标检测和图像分类识别项目可看我主页其他文章 功能演示: 卷积神经网络,中草药识别系统,resnet50,mobilenet【pytorch框架,python】_哔哩哔哩_bilibili (一)简介 基于卷积神经网络的中…

3.添加缓存和缓存更新策略

项目地址:https://github.com/liwook/PublicReview 添加缓存 查询商铺缓存 我们查询商店的时候,通过接口查询到的数据有很多,我们希望在此用Redis缓存数据,提高查询速度。 对于店铺的详细数据,这种数据变化比较大&a…

Win安装Redis

目录 1、下载 2、解压文件并修改名称 3、前台简单启动 4、将redis设置成服务后台启动 5、命令启停redis 6、配置文件设置 1、下载 【下载地址】 2、解压文件并修改名称 3、前台简单启动 redis-server.exe redis.windows.conf 4、将redis设置成服务后台启动 redis-server -…

xlnt加载excel报错:xl/workbook.xml:2:2581: error: attribute ‘localSheetId‘ expected

解决方案 大家不一定能看懂,地址里说的啥意思,地址过去主要说明了从https://github.com/musshorn/xlnt/tree/issue_685合入可以解决问题,后面再想推送到官方地址,但没人维护了。 我这边直接给大家说一个结果就是:问题…

python 爬虫 入门 四、线程,进程,协程

线程和进程大部分人估计都知道,但协程就不一定了。 一、进程 进程是操作系统分配资源和调度的基本单位,一个程序开始运行时,操作系统会给他分配一块独立的内存空间并分配一个PCB作为唯一标识。初始化内存空间后进程进入就绪态,PC…

GUI编程

GUI编程 【Java从0到架构师课程】笔记 GUI简介 GUI:图形用户界面,在计算机中采用图形的方式显示用户界面 java的GUI开发 AWT:java最早推出的GUI编程开发包,界面风格跟随操作系统SWT:eclipse就是java使用SWT开发的Sw…

【ArcGIS微课1000例】0125:ArcGIS矢量化无法自动完成面解决方案

文章目录 一、坐标系统问题二、正确使用自动完成面工具一、坐标系统问题 1. 数据库坐标系 arcgis矢量化的过程中,无法自动完成面,可能是因为图层要素没有坐标系造成的。双击数据库打开数据库属性,可以查看当前数据框的坐标系。 2. 图层坐标系 双击图层,打开图层属性,切…

从零开始学PHP之变量作用域数据类型

一、数据类型 上篇文章提到了数据类型,在PHP中支持以下几种类型 String (字符串)Integer(整型)Float (浮点型)Boolean(布尔型)Array(数组)Objec…

滤波算法与SLAM:从概率角度理解SLAM问题

滤波算法与SLAM 第三章:MAP/MLE问题和贝叶斯网络 文章目录 滤波算法与SLAM前言一、最大后验问题(MAP)与最大似然问题(MLE)二、贝叶斯网络与SLAM问题三、因子图与SLAM问题四、从概率角度理解Kalman Filter与SLAM 前言 …

我谈傅里叶变换幅值谱的显示

在图像处理和分析中通常需要可视化图像傅里叶变换的幅值谱。通过幅值谱,可以直观地观察频率成分的分布,帮助理解图像的结构和特征。 很多刊物中直接显示傅里叶变换的幅值谱。 FFT fftshift(fft2(double(Img))); FFT_mag mat2gray(log(1abs(FFT)));由…

【Linux】线程基本概念,线程控制

目录 基本概念 重新理解进程 线程真实存在吗? 问题解答 线程资源 线程控制 线程创建 如何全面看待线程函数传参 如何看到线程函数返回 线程查询 线程等待 线程终止 线程分离 基本概念 线程(thread)是指在单个进程内,多…

探索前端与 AI 的结合:如何用 GPT-4 助力开发效率

前言:开发者的“神队友” GPT-4 还记得那些深夜奋战,紧盯着屏幕敲代码的日子吗?表单不验证、布局乱飞、BUG 根本找不到,这些时刻简直能让人抓狂。你可能会想:“要是有个智能助手能帮我搞定这些多好!” 那么…

#HarmonyOS:页面和自定义组件生命周期

页面生命周期 即被Entry装饰的组件生命周期 onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景。onPageHide: 页面每次隐藏时触发一次,包括路由过程、应用进入后台等场景。onBackPress: 当用户点击返回按钮是触发 组件…