Vue前端设置Cookie和鉴权问题

前景:本周五的时候后端让我从前端工程中排查,有没有设置cookie。在我连续说了没有的情况下,连续四次被质疑。最后以我发四说没有,不欢而散。 基于对前端的不信任,写个小作文来说明vue前端怎么设置cookie

Cookie的概念性质的东西这里不赘述。

一:Cookie生成机制

  1. 服务端生成,在 Http响应头 Respond-Header 中 Set-Cookie
  2. 客户端生成

二:服务端生成

  • 服务端可通过 Cookie类的构造函数和实例方法设置Cookie(key=value)并返回,
  • 浏览器收到响应并发现响应头中有 Set-Cookie,浏览器就会把key、value保存在浏览器中。
  • 在向同一个域名发起的后续请求中,浏览器会在请求头中加上该cookie字段(除非它过期了)。

服务器端通过设置Set-Cookie 的 Expires Max-Age两个属性来设置cookie的有效期

1、Expires 

Set-Cookie: sessionId=abc123; Expires=Thu, 01 Jan 1970 00:00:00 UTC;

Expires 的值必须是一个完整的日期和时间,包括年、月、日、时、分、秒和时区。

  • Expires 值为 过去时,浏览器立马删除该Cookie;
  • Expires 值为 将来时,浏览器会在将来的那个时点删除该Cookie

2、Max-Age

Set-Cookie: sessionId=abc123; Max-Age=0;

Max-Age的值是个秒值。

  • Max-Age = 0;浏览器立即删除该Cookie
  • Max-Age = -1;  浏览器重启后Cookie消失。关闭当前页签或者关闭浏览器,Cookie都会消失。
  • Max-Age=3600; 表示3600 秒(即 1H)内有效,超期失效。

同时设置这俩属性时,Max-Age 的优先级高于Expires

三:客户端生成方式

  1. JavaScript 自带的 document.cookie
  2. 第三方依赖库:如js-cookie

1、document.cookie

// 设置cookie
document.cookie = 'sessionId=abc123; path=/'// 获取Cookie值
const getCookie = name => {var cookies = document.cookie.split(";");for (let i = 0; i < cookies.length; i++) {const [key, value] = cookies[i].split("=")if (key.trim() === name) {return value;}}return ""
};// 删除cookie 
// 方式:将cookie的 过期时间(expires)属性指定为一个过去的时间
const deleteCookie = name => { document.cookie = name + '=;expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';  
}
deleteCookie('password');

2、js-cookie

import Cookies from 'js-cookie';  // 设置cookie  
Cookies.set('sessionId', 'abc123');  // 获取cookie  
const sessionId = Cookies.get('sessionId');  // 删除cookie  
Cookies.remove('sessionId');

四:--------- 我是分割线 ---------

前端是否设置cookie,工程中全局搜索cookie关键字,就能判断前端是否做了特殊处理。

cookie通过浏览器自动管理,大多数情况下前端并不需要处理cookie。

浏览器本地数据存储:建议使用web storage(包括localStorage和sessionStorage)。更大的存储空间(5M左右),提供了多个属性和方法,数据操作更简单。

五:鉴权

1)cookie的缺点

  • 不安全:cookie的键值对都是明文,用户可通过浏览器或其他工具拿到cookie,可能被篡改(document.cookie),存在安全隐患。因cookie存在安全问题,有些企业的内网或安全策略会要求禁用cookie。
  • 容量限制:每个cookie的大小不超过4KB,单个域名设置的Cookie数量有限制。
  • 不能存实例
  • 一些设备或浏览器可能不支持cookie
  • 跨域问题
  • ...

因上面的缺点,cookie不适合做鉴权,需要用session配合。

2)Session

Cookie将内容(key、value等信息)通过响应头返回。如果这些内容不直接返回,而是保存在服务器端,给内容取个名字叫session上下文,给上下文取个id叫SessionId(随便叫什么id都行)。客户端跟服务器端通过SessionId关联。

SessionId通常以Cookie的形式存储在客户端。但Cookie并不是唯一方式,URL也可以。不过URL方式对用户不友好,所以基本上没有互联网项目会采用这种方案。

Session的问题

  • Session中保存的数据的大小要考虑到存储上限
  • 依赖Session的关键业务一定要确保客户端开启了Cookie
  • 在负载均衡的情况下,由于存在Web服务器内存中的Session无法共享,通常需要重写Session的实现。
  • Session内容的丢失都是有原因的,通常都是由于Web服务器的重启造成的

cookie或者sesssion,都是后端在主导,前端相关的动作都是由标准浏览器来完成。js在其中只是用户体验的工作,而不是逻辑功能层面的工作

现在最普遍的鉴权方案是:Token。

3)Token

Token 是在服务端产生的。前端使用用户名/密码向服务端请求认证,服务端认证成功,那么服务端会返回 Token 给前端。前端可以在每次请求的时候带上 Token 证明自己的合法地位。

Token的全称是JSON Web Token,简称jwt。

详述

前端使用用户名/密码向服务端请求认证,服务端认证成功后,将用户id等信息进行打包,打包时利用secret(HS256算法、RS256算法等)加密,那么服务端会返回 Token 给前端。

前端拿到token,是解不开的,因为服务器肯定不会把secret传给前端,让前端去解。

前端可以在每次请求的时候带上 Token 证明自己的合法地位。后端在请求头(一般放在请求头)中拿到这个Token,进行验证。验证主要是两个层面:签名是否有效,是否过期。

The end.

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

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

相关文章

【git】-初始git

一、什么是版本控制&#xff1f; 二、Git的安装 三、掌握Linux常用命令 四、Git基本操作 1、提交代码 2、查看历史提交 3、版本回退 一、什么是版本控制&#xff1f; 版本控制是一种用于记录文件或项目内容变化的系统。它通过版本标识和版本历史记录来管理不同版本&#…

MPLS原理及配置

赶时间可以只看实验部分 由来&#xff1a;90年代中期&#xff0c;互联网流量的快速增长。传统IP报文依赖路由器查询路由表转发&#xff0c;但由于硬件技术存在限制导致转发性能低&#xff0c;查表转发成为了网络数据转发的瓶颈。 因此&#xff0c;旨在提高路由器转发速度的MPL…

计算机网络 (35)TCP报文段的首部格式

前言 计算机网络中的TCP&#xff08;传输控制协议&#xff09;报文段的首部格式是TCP协议的核心组成部分&#xff0c;它包含了控制TCP连接的各种信息和参数。 一、TCP报文段的结构 TCP报文段由首部和数据两部分组成。其中&#xff0c;首部包含了控制TCP连接的各种字段&#xff…

通过vba实现在PPT中添加计时器功能

目录 一、前言 二、具体实现步骤 1、准备 2、开启宏、打开开发工具 3、添加计时器显示控件 3.1、开启母版 3.2、插入计时器控件 4、vba代码实现 4.1、添加模块 4.2、添加代码 4.3、保存为pptm 5、效果展示 一、前言 要求/目标:在PPT中每一页上面增加一个计时器功能…

Windows11下OpenCV最新版4.11源码编译

OpenCV最新版4.11源码编译 1. Opencv源码下载 Opencv Release下载网址 也可以在github里下载: https://github.com/opencv/opencv/releases 2. Cmake工具下载 Cmake 官网下载地址 3. 安装Cmake 4. 验证Cmake是否正常安装成功 5. 编译Opencv源码 5.1 配置opencv源码目录…

HTML中link的用法

一点寒芒先到&#xff0c;随后&#xff0c;抢出如龙&#xff01; 对于本人而言&#xff0c;这篇笔记内容有些扩展了&#xff0c;有些还未学到的也用上了&#xff0c;但是大概可以使用的明白&#xff0c;坚持下去&#xff0c;相信一定可以建设一个稳固的根基。 该文章为个人成…

浅谈云计算02 | 云计算模式的演进

云计算计算模式的演进 一、云计算计算模式的起源追溯1.2 个人计算机与桌面计算 二、云计算计算模式的发展阶段2.1 效用计算的出现2.2 客户机/服务器模式2.3 集群计算2.4 服务计算2.5 分布式计算2.6 网格计算 三、云计算计算模式的成熟与多元化3.1 主流云计算服务模式的确立3.1.…

kubernetes第八天

1.RBAC 角色&#xff1a;Role&#xff1a;某个空间的角色&#xff0c;属于局部资源 ClusterRole&#xff1a;整个集群的角色&#xff0c;属于集群资源 查看角色&#xff1a;kubectl get clusterrole 规则 主题&#xff1a;User:用户自定义名称&#xff0c;一般是给人用的 Se…

微信小程序-Docker+Nginx环境配置业务域名验证文件

在实际开发或运维工作中&#xff0c;我们时常需要在 Nginx 部署的服务器上提供一个特定的静态文件&#xff0c;用于域名验证或第三方平台验证。若此时使用 Docker 容器部署了 Nginx&#xff0c;就需要将该验证文件正确地映射&#xff08;挂载&#xff09;到容器中&#xff0c;并…

腾讯云AI代码助手编程挑战赛-智能聊天助手

作品简介 本作品开发于腾讯云 AI 代码助手编程挑战赛&#xff0c;旨在体验腾讯云 AI 代码助手在项目开发中的助力。通过这一开发过程&#xff0c;体验到了 AI 辅助编程的高效性。 技术架构 前端: 使用 VUE3、TypeScript、TDesign 和 ElementUI 实现。 后端: 基于 Python 开发…

计算机视觉算法实战——面部特征点检测

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ ​​​​​​​​​​​​​​​​​​ 1. 领域介绍✨✨ 面部特征点检测&#xff08;Facial Landmark Detection&#xff09;是计算机视觉中…

【STM32-学习笔记-8-】I2C通信

文章目录 I2C通信Ⅰ、硬件电路Ⅱ、IIC时序基本单元① 起始条件② 终止条件③ 发送一个字节④ 接收一个字节⑤ 发送应答⑥ 接收应答 Ⅲ、IIC时序① 指定地址写② 当前地址读③ 指定地址读 Ⅳ、MPU6050---6轴姿态传感器&#xff08;软件I2C&#xff09;1、模块内部电路2、寄存器地…

Android SDK下载安装(图文详解)

安装完sdk&#xff0c;就可以直接使用adb命令了&#xff0c;我们做app自动化测试&#xff0c;也需要sdk环境的依赖。 1. 下载Android SDK 网盘下载地址&#xff1a;https://pan.quark.cn/s/8398e52cefc9 官网下载地址&#xff1a;https://www.androiddevtools.cn/ &#xff08;…

农业移动式水肥一体机全面解析:开启精准农业新篇章

在当今科技飞速发展的时代&#xff0c;农业领域也迎来了众多创新设备&#xff0c;农业移动式水肥一体机便是其中的佼佼者。它正悄然改变着传统的农业灌溉与施肥模式&#xff0c;为实现精准农业提供了强有力的支持。 一、什么是农业移动式水肥一体机 农业移动式水肥一体机&…

2008-2020年各省社会消费品零售总额数据

2008-2020年各省社会消费品零售总额数据 1、时间&#xff1a;2008-2020年 2、来源&#xff1a;国家统计局、统计年鉴 3、指标&#xff1a;行政区划代码、地区、年份、社会消费品零售总额 4、范围&#xff1a;31省 5、指标解释&#xff1a;社会消费品零售总额指企业&#x…

江科大STM32入门——读写备份寄存器(BKP)实时时钟(RTC)笔记整理

wx&#xff1a;嵌入式工程师成长日记 https://mp.weixin.qq.com/s/hDk7QaXP8yfYIj1gUhtMrw?token1051786482&langzh_CNhttps://mp.weixin.qq.com/s/hDk7QaXP8yfYIj1gUhtMrw?token1051786482&langzh_CN RTC是一个独立的定时器&#xff0c;BKP并不能完全掉电不丢失&am…

GitLab CI/CD使用runner实现自动化部署前端Vue2 后端.Net 7 Zr.Admin项目

1、查看gitlab版本 建议安装的runner版本和gitlab保持一致 2、查找runner 执行 yum list gitlab-runner --showduplicates | sort -r 找到符合gitlab版本的runner&#xff0c;我这里选择 14.9.1版本 如果执行出现找不到下载源&#xff0c;添加官方仓库 执行 curl -L &quo…

MySQL解压版(保姆级教程)

文章目录 1. 下载MySQL2. 解压压缩包3. 添加环境变量4. 创建配置文件5. 启动管理员模式下的CMD6. 重启mysql7. 检查服务是否成功启动8. 可能遇见的错误&#x1f3af; 数据目录未正确初始化&#x1f3af; MySQL服务已存在但路径错误&#x1f3af; 端口被占用&#x1f3af; MySQL…

人工智能实验(四)-A*算法求解迷宫寻路问题实验

零、A*算法学习参考资料 1.讲解视频 A*寻路算法详解 #A星 #启发式搜索_哔哩哔哩_bilibili 2.A*算法学习网站 A* 算法简介 一、实验目的 熟悉和掌握A*算法实现迷宫寻路功能&#xff0c;要求掌握启发式函数的编写以及各类启发式函数效果的比较。 二、实验要求 同课本 附录…

【Vue实战】Vuex 和 Axios 拦截器设置全局 Loading

目录 1. 效果图 2. 思路分析 2.1 实现思路 2.2 可能存在的问题 2.2.1 并发请求管理 2.2.2 请求快速响应和缓存带来的问题 3. 代码实现 4. 总结 1. 效果图 如下图所示&#xff0c;当路由变化或发起请求时&#xff0c;出现 Loading 等待效果&#xff0c;此时页面不可见。…