根域名之cookie存储取值

460 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

前言

这几天公司要求整一个工业互联网的项目,要求每个子模块的token必须从根模块去取,确保数据的安全性,同时也方便单点登录,借此机会重新熟悉下公有模块token的取值。

多级域名

因为是多个模块,所以我们的项目存在多个小的子系统,那么就会有一个根域名的存在。

问:什么是多级域名

答:首先我们要知道什么是一级域名,比如我们常见的baidu.com,souhu.com....,这些都是一级域名,一级域名下可以存在子域名,说白了就是大佬的附属小弟。早几年很火的百度贴吧(tieba.baidu.com)就是baidu.com的附属小弟,所以跟人混一定要在后面加上大佬的名字。 这里注意www.baidu.com依然是小弟。他是百度的搜索业务。

image.png

cookie

一般情况下,cookie都是后端返回的,不存在前端的随意取值。

看下cookie的详细定义:

cookie是一段文本,格式key-value

1.当客户端第一次访问服务器端时,服务器会成cookie信息,并且在响应头的set-cookie里面把生成的cookie信息发送给客户端

2.当客户端第2-N次访问服务端的时候,那么客户端就会在请求头的cookie带上cookie信息,从而实现鉴权

/**
 * 在后台设置浏览器cookie的值
 * maxAge设置失效时间,单位是秒
 */
Cookie cookie = new Cookie("AAAAA", UUID.randomUUID().toString());
cookie.setMaxAge(30*60);
response.addCookie(cookie);

这样后台就会发送到浏览器一个cookie,我们就可以取值了。

注意: 我们在子域名进行cookie的取值时可以进行向上取值,但是不能进行向下的取值。 打个比方:就好像你去迪士尼一样,大门就是一级域名,只要你买了票就可以进出,但是里面的各种游玩项目就是二级域名,你要有对应得票才可以玩耍,你只有海洋馆得票那就进不了电影院的门,没办法就是这样的无可奈何,在数据上也是为了确保数据的安全,多级域名之间不能随意的去访问,更不能访问二级域名下的三级域名.

取值

前端的开发人员可以通过domain进行cookie的取值。

假设我们有一个一级域名: xiaoyangren.com

同时我们还有一个二级域名:aa.xiaoyangren.com

上代码:

前端的话我们要安装一个插件js-cookie,(js-cookie是一个简单的,轻量级的处理cookies的js API,用来处理cookie相关的插件)

安装:

npm install js-cookie --save

使用:

//配置生产环境地址 .env.production

# 生产环境域名domain
VUE_APP_DOMAIN='xiaoyangren.com'

//store文件存储

import Cookies from 'js-cookie'
const TokenKey = 'Token'
export function setToken(token) {
  return Cookies.set(TokenKey, token, {
    domain: process.env.VUE_APP_DOMAIN
  })
}

OK,这样我们就可以从一级域名xiaoyangren.com去取得对需要的cookie。

结语:

这样我们就可以实现从一级域名中取值cookie来到子系统中使用,那么下次我们将回答如果子系统的有自己的登录,他又从一级域名登录到子系统,cookie之间会不会有什么冲突