当前位置: 首页 > news >正文

Vue实现不同网站之间的Cookie共享功能

前言

最近有小伙伴在聊天室中提到这么一个需求,就是说希望用户在博客首页中登录了之后,可以跳转到管理系统去发布文章。这个需求的话就涉及到了不同网站之间cookie共享的功能,那么咱们就来试着解决一下这个功能。

实现方式

1. 后端做中转
我们可以通过后端服务去做一个中转,即如第三方登录一样,前端点击按钮,然后把cookie当做参数传给后端,然后后端重定向到管理系统,并把cookie值拼接到地址栏后面,然后管理系统就可以解析地址栏获取到cookie值。

2. js-cookie
我们项目中用的是js-cookie来管理cookie的,那我们就可以使用它来更快更方便的解决这个需求。当然其他第三方cookie都是可以的,基本代码都是通用的。

具体代码
import Cookies from 'js-cookie'const TokenKey = 'blog_token'// 获取当前域名
const getDomain = () => {const hostname = window.location.hostname// 如果是 localhost,返回 null 让 cookie 在所有端口共享if (hostname === 'localhost' || hostname === '127.0.0.1') {return null}// 如果是 IP 地址,返回完整 IPif (/^(\d{1,3}\.){3}\d{1,3}$/.test(hostname)) {return hostname}// 获取顶级域名,例如 example.comconst domainParts = hostname.split('.')if (domainParts.length > 2) {return '.' + domainParts.slice(-2).join('.')}return hostname
}export function getToken() {return Cookies.get(TokenKey)
}

从以上代码我们可以看出来解决这个需求的关键点其实就是通过domain属性,通过getDomain先判断是本地开发还是线上环境,本地开放的话全端口共享,线上访问的就子域名共享。
要注意俩个网站的Tokenkey需要一致

缺陷

通过以上代码大家在测试验证之后会发现,删除cookie操作也是同步的,也就说一但其中一个网站删除了cookie就会导致另一个网站也没有了数据,这可能是大家想要的效果,但不是我想要的,那么我们就需要去解决删除同步的问题。

// 获取当前完整域名,用于删除操作
const getCurrentDomain = () => {return window.location.hostname
}export function setToken(token) {// 设置 cookie,7天有效期,并添加 domain 配置return Cookies.set(TokenKey, token, { expires: 7,domain: getDomain()})
}

我们还是通过domain去指定只有在当前域名才可以删除,这样我们就解决了删除同步的缺陷。

改进

虽然通过以上步骤可以实现cookie共享和删除,但是不要忘了咱们的需求点,我们是要不重新登录,虽然共用一个token是可以不需要重新登录,但是一但某一边退出了,那么另一边的token也就会失效。
要实现这个功能,具体就要看各位项目中的权限认证代码环节了,如本项目用到的是sa-token,我们就可以使用sa-token去生成一个临时token,再把临时token赋值到管理系统中的cookie中

http://www.xdnf.cn/news/342199.html

相关文章:

  • 信息系统项目管理工程师备考计算类真题讲解十四
  • 【软件设计师:软件工程】9.软件开发模型与方法
  • Java三大基本特征之多态
  • auto_ptr和unique_ptr
  • 统一授权与加密防护,CodeMeter 护航机器视觉创新全链路
  • kafka logs storage
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(16):单词与句子
  • Element-ui Table tree 结构使用(解决无展开箭头)
  • (14)Element Plus项目综合案例
  • 基础算法系列——树的入门
  • kafka records deletion policy
  • 如何设置内网映射端口到外网访问?哪些软件可以进行端口映射?
  • 2025.05.07-携程春招笔试第二题
  • flutter build apk出现的一些奇怪的编译错误
  • K8s网络从0到1
  • 《易语言学习大全》
  • k8s术语之DaemonSet
  • [python] 函数基础
  • 深入解析asyncio的实现与应用
  • C#简易Modbus从站仿真器
  • 如何将 Build at、Hash 和 Time git 的 Tag 号等构建信息,自动写入一个 JSON 文件
  • sql serve 多表联合查询,根据一个表字段值动态改变查询条件
  • 【Dify系列教程重置精品版】第七章:在Dify对话中显示本地图片之FastAPI与Uvicorn
  • PCL点云按指定方向进行聚类(指定类的宽度)
  • mission planner烧录ardupilot固件报错死机
  • ESP32开发之freeRTOS的互斥量
  • 网络协议之DHCP和PXE分析
  • QT中多线程的实现
  • Rust包、crate与模块管理
  • 领域驱动设计(DDD)解析