JavaWeb基础 -- Cookies与Session的区别

news2024/12/25 14:56:16

JavaWeb基础 – Cookies与Session的区别

1.内容简介

在Java开发面试过程中这类问题也是经常被面试官问到,因此本章将会讲解Cookies与Session的区别,与此同时也会顺带讲解Token、JWT的区别。


2.C/S会话

2.1 产生原因

HTTP协议是无状态的,即每一次客户端和服务端完成回话时,服务端不会保存任何回话信息。因此HTTP发送的每一个请求都是独立的。独立的请求就会导致服务端无法确认当前发起请求的用户信息,同时也无法分别上一次请求和本次请求发送是否是同一个用户。服务器与浏览器为了进行回话跟踪,需要主动维护一个状态。这个状态用于告知服务端前后两个请求是否来自同一浏览器。而这个状态需要通过 cookie 或者 session 去实现。

2.2 Cookies

2.2.1 Cookie的性质

  • 存储位置:Cookie存储在客户端浏览器上,其本身是服务器发送到用户浏览器并保存在本地的一小块数据,并且会在浏览器下次向同一服务器再次发起请求时被携带发送至服务器上。
  • 跨域性:Cookie不可跨域,每个Cookie都会绑定单一的域名,无法在其他域名下使用。一级域名和二级域名之间是允许共享使用的(靠的是 domain)。

2.2.2 Cookie的属性

属性说明
name = value键值对,设置Cookie的名称和相应值,内容都为字符串。
domain指定Cookie所属域名,默认为当前域名。
path指定Cookie在那个路由下是生效的,默认为"/"。
maxAgeCookie的失效时间,单位为秒。若为整数,则在maxAge后失效。若为负数则是临时Cookie
expires过期时间,在设置的某个时间点后Cookie失效
secure该Cookie是否仅被使用安全协议传输,如HTTPS、SSL等。
httpOnly若给Cookie设置了httpOnly属性,则无法通过JS脚本读取信息,但并非绝对安全。

2.3 Session

2.3.1 Session的性质

  • Session是另一种记录服务器与客户端回话状态的机制。
  • Session是基于Cookie实现的,Session存储在服务器,而SessionId会被存入Cookie中。
    alt text

2.3.2 Session认证流程

  • 用户第一次请求服务器时,服务器根据用户提交的相关信息创建对应的Session。
  • 请求返回时将该Session的唯一标识信息SessionId返回至浏览器。
  • 浏览器接收到SessionId后将会存入Cookie中,并记录SessionId属于哪个域名。
  • 当用户第二次访问时,会向服务器发送携带SessionId的Cookie,服务器根据ID查询对应Session信息,若没有找到则登录失败,若找到则可执行后续操作。

2.4 Token(令牌)

2.4.1 Access Token

  • 访问API时所需的资源凭证
  • 组成:UID、当前时间戳、签名(token 的前几位以哈希算法压缩成的一定长度的十六进制字符串)
  • 特点:
    • 服务端无状态化,可扩展性好
    • 支持移动端设备
    • 支持跨程序调用
  • 验证流程
    • 客户端使用用户名和密码请求登录。
    • 服务端收到请求后去验证用户名和密码。
    • 验证成功后服务端生成Token并发送至客户端。
    • 客户端收到Token后会存储在本地。
    • 客户端每次想服务端发起请求时都会携带Token
    • 服务端接收请求后,先验证Token,若Token有效则返回数据
      alt text

2.4.2 Refersh Token

Refresh Token 是专用于刷新 Access Token 的 Token。如果没有 Refresh Token,也可以刷新 Access Token,但每次刷新都要用户输入登录用户名与密码,会很麻烦。

alt text

Access Token 的有效期比较短,当 Acesss Token 由于过期而失效时,使用 Refresh Token 就可以获取到新的 Token,如果 Refresh Token 也失效了,用户就只能重新登录了。Refresh Token 及过期时间是存储在服务器的数据库中,只有在申请新的 Acesss Token 时才会验证,不会对业务接口响应时间造成影响,也不需要向 Session 一样一直保持在内存中以应对大量的请求。

2.5 JWT(JSON Web Token)

JWT是目前最流行的烤鱼认证解决方案,是一种授权机制。JWT 是为了在网络应用环境间传递声明而执行的一种基于 JSON 的开放标准(RFC 7519)。JWT 的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源。比如用在用户登录上。JWT加密可以使用 HMAC 算法或者是 RSA 的公/私秘钥对 JWT 进行签名。因为数字签名的存在,这些传递的信息是可信的。

  • JWT认证流程如下:
    • 用户输入用户名和密码登录,服务端认证成功后会返回给客户端一个JWT
    • 客户端将Token保存至本地
    • 当用户希望访问一个受保护的路由或者资源的时候,需要请求头的 Authorization 字段中使用Bearer 模式添加 JWT,其内容看起来是下面这样:
Authorization: Bearer

3.区别

3.1 Cookie与Session的区别

  • 安全性:Session比Cookie更安全,Session存储在服务器而Cookie存储在本地。
  • 存取类型:Cookie与Session存取值的类型不同,Cookie 只支持字符串数据,想要设置其他类型的数据,需要将其转换成字符串,Session 可以存任意数据类型。
  • 有效期:Cookie与Session有效期不同,Cookie能保持较长的失效时间,而Session较短。
  • 存储大小:单个 Cookie 保存的数据不能超过 4K,Session 可存储数据远高于 Cookie,但是当访问量过多,会占用过多的服务器资源。

3.2 Token与Session的区别

  • Session是一种记录服务端与客户端会话状态的机制,使服务端有状态化,可以记录会话信息。而Token是访问API所需要的资源凭证。Token是服务端无状态化,不会存储会话信息。
  • Session与Token并非对立,在身份认证过程中,Token比Session安全性高,因为每个请求都有签名,同时也能防止监听与重放攻击,而Session需要依赖链路层保障通讯安全。在使用Token时也可以加入Session实现有状态会话。
  • 所谓 Session 认证只是简单的把 User 信息存储到 Session 里,因为 SessionID 的不可预测性,暂且认为是安全的。而 Token ,如果指的是 OAuth Token 或类似的机制的话,提供的是 认证 和 授权 ,认证是针对用户,授权是针对 App 。其目的是让某 App 有权利访问某用户的信息。这里的 Token 是唯一的。不可以转移到其它 App上,也不可以转到其它用户上。Session 只提供一种简单的认证,即只要有此 SessionID ,即认为有此 User 的全部权利。是需要严格保密的,这个数据应该只保存在站方,不应该共享给其它网站或者第三方 App。简单来说,若需要实现三方数据共享如跳转登录等功能,则需要使用Token。若是在本网站内则使用哪种方式都无所谓。

3.3 Token与JWT的区别

  • 相同点:

    • 都是访问资源的令牌
    • 都可以记录用户信息
    • 都是使服务端无状态化
    • 验证成功后,客户端才能访问服务端上受保护的资源
  • 区别

    • Token:服务端验证客户端发送过来的 Token 时,还需要查询数据库获取用户信息,然后验证 Token 是否有效。
    • JWT:将 Token 和 Payload 加密后存储于客户端,服务端只需要使用密钥解密进行校验(校验也是 JWT 自己实现的)即可,不需要查询或者减少查询数据库,因为 JWT 自包含了用户信息和加密的数据。

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

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

相关文章

Linux权限管理应用实例

目录 权限管理应用实例1 权限管理应用实例2 权限管理应用实例3 权限管理应用实例1 有两个组police和bandit,四个用户jack,jerry,xh,xq。 权限管理应用实例2 创建这两个组还有四个用户,并且给这些用户设置密码。 …

C++ 设计模式——命令模式

C 设计模式——命令模式 C 设计模式——命令模式主要组成部分构建过程命令模式 UML 图UML 图解析 命令模式的优点命令模式的缺点命令模式适用场景总结完整代码 C 设计模式——命令模式 命令(Command)模式是一种行为型模式,它将请求封装为对象,从而使您能…

百度云语音识别demo验证

百度云语音识别调研 百度语音识别API: https://ai.baidu.com/ai-doc/SPEECH/il9mh8cjb 1: 注册登录百度账户. 2:打开控制台选择语音技术. 3: 领取免费额度(个人账户.企业账户不确定是否免费额度一样) 4: 由于开发测试使用,可以选择不需要包名. 5: 下载demo程序: https://g…

pat1074 k个一组反转链表

是我的错觉吗 直接把%d赋值给数组小标,不能把值副进去? 可是这样可以? 乱套了这 同样的代码 所以暂时将你眼睛闭了起来 所以还是好好老实两次赋值 。。。 写糊了已经 注意这句话 链表中部翻转: 不带dummy真的好麻烦且头…

苹果手机照片格式heic怎么改jpg?教你3招快速转换

苹果手机照片格式heic怎么改jpg?将苹果手机照片格式从HEIC转为JPG,在日常使用中带来了极大便利。HEIC格式虽高效节省空间,但兼容性不如JPG广泛。转为JPG后,照片能轻松在多数设备、软件和在线平台上分享、打印或编辑,无…

SmartGit-Git版本控制系统的图形化客户端

SmartGit: SmartGit是一款免费的、专业的Git版本控制系统的图形化客户端。它适用于Windows、Mac和Linux等多种操作系统,提供了直观的用户界面和丰富的功能。支持创建、克隆、推送、拉取、合并和管理Git仓库,以及强大的分支管理功能。还提供了…

武汉流星汇聚:亚马逊中国卖家精准布局,万圣节装饰热销引领潮流

随着秋风渐起,万圣节的脚步虽还远在三个月之后,但消费者对于节日氛围的营造与期待已悄然升温。在亚马逊这一全球电商巨头的平台上,万圣节相关产品的搜索热潮正以前所未有的速度席卷而来,为中国卖家提供了又一个展示实力、捕捉商机…

大模型概念入门:探索这一AI技术的奥秘

一、引言 ChatGPT、Open AI、大模型、提示词工程、Token、幻觉等人工智能的黑话,在2023年这个普通却又神奇的年份里,反复的冲刷着大家的认知。让一部分人彻底躺平的同时,让另外一部分人开始焦虑起来,生怕在这个人工智能的奇迹之年…

无人机搭载的高压喷水清洗技术详解

随着城市化进程的加速,高空建筑、桥梁、电力设施等清洁维护问题日益凸显。传统的人工清洗方式不仅效率低下、成本高昂,还存在高空作业安全风险。无人机搭载的高压喷水清洗技术应运而生,以其独特的优势成为解决这一难题的新方案。该技术通过无…

不看表了

前段时间重温了一遍刘德华在1992年拍的《赌城大亨-新哥传奇》,里面叶倩文唱的《不了情》,顾媚唱的太凄,小凤姐唱的太醇,而莎莉叶倩文唱的太有大时代风云际会儿女情长味道。 刘德华华仔和邱淑贞豆豆,合作拍摄的两部大佬…

网络空间安全中的数字孪生技术研究

源自:系统仿真学报 作者:任乾坤,熊鑫立,刘京菊,姚倩 注:若出现显示不完全的情况,可 V 搜索“人工智能技术与咨询”查看完整文章 人工智能、大数据、多模态大模型、计算机视觉、自然语言处理、数字孪生、深度强化学习…

软件工程造价师习题练习 19

1.在 A 系统中,用户可以对白名单进行新增、删除与查询的操作。在查询的过程中,用户在搜索框内录入关键字,这个“录入”可以识别为非基本过程。 正确 错误 在A系统中,用户对白名单进行新增、删除与查询的操作构成了系统的主要功能…

Scheme3.0标准之重要特性及用法实例(三十五)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列…

【Python进阶(八)】——数据框

🍉CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一|统计学|干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项,参与研究经费10w、40w级横向 文…

JetBrains 开发工具——学生授权免费申请指南

2022 JetBrains 开发工具——学生授权免费申请指南 | JetBrains 博客https://blog.jetbrains.com/zh-hans/blog/2022/08/24/2022-jetbrains-student-program/ 第一次下载datagrip试用期一个月,在读学生申请试用期1年,可续期。 参考第一个文档申请学生认…

黑神话悟空配置要求是什么?

黑神话悟空最低配置要求是:操作系统Windows1064位、处理器Inteli5-8400或AMDRyzen51600、内存8GBRAM、图形NVIDIAGeForceGTX1060或AMDRadeonRX580、存储空间需要最少50GB可用空间。推荐配置:操作系统Windows1064位、处理器IntelCorei7-9700或AMDRyzen555…

内网渗透的风行者—Yasso

Yasso : Yasso,让内网渗透变得简单而高效。- 精选真开源,释放新价值。 概览 Yasso是由sairson精心打造的内网渗透辅助工具集,它为网络安全专家和渗透测试人员提供了一个功能强大的工作平台。在面对错综复杂的网络环境时&#xff…

uniapp实现区域滚动、下拉刷新、上滑滚动加载更多

背景&#xff1a; 在uniapp框架中&#xff0c;有两种实现办法。第1种&#xff0c;是首先在page.json中配置页面&#xff0c;然后使用页面的生命周期函数&#xff1b;第2种&#xff0c;使用<scroll-view>组件&#xff0c;然后配置组件的相关参数&#xff0c;包括但不限于&…

【SpringBoot】电脑商城-07-上传头像

基于SpringMVC的文件上传 1 MultipartFile接口 MultipartFile接口常用的的API见下表&#xff1a; 方法功能描述String getOriginalFilename()获取上传文件的原始文件名&#xff0c;即该文件在客户端中的文件名boolean isEmpty()判断上传的文件是否为空&#xff0c;当没有选择…

flowable源码解读——并行多实例节点任务是否是顺序生成

最近在项目开发中需要在多实例开始监听里修改一个全局的计数变量&#xff0c;不太确定并行多实例任务在底层引擎是顺序生成还是并行生成的&#xff0c;如果是顺序生成的则不影响&#xff0c;如果是并行生成 则修改一个全局的计数变量就会出现数据错误问题&#xff0c;查阅了flo…