世界杯欧洲区预选赛_世界杯足球几年一次 - chinaacecloud.com



Response中set

一、问题

登录成功后后端把token保存到cookie中,在浏览器的Response中set-cookie里可以看到值,但是浏览器的Application中Cookies中没有想要保存的token

set-cookie.png

Cookies.png

第一种情况(我的不是这种情况)

由于Request URL请求域名(xxx.gootschool.com)和Response Headers中Set-Cookie中的Domain(gootschool.com)不匹配造成的

解决方案1

去掉Set-Cookie中的Domain

解决方案2

在nginx中添加host

server {

listen 80;

server_name api.gootschool.com;

client_max_body_size 1024M;

proxy_set_header X-Forwarded-Host $host;

proxy_set_header X-Forwarded-Server $host;

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

proxy_set_header Host $host; # 转发时,携带本身的host头信息,而不是127.0.0.1

# 上传路径的映射

location /api/upload {

rewrite "^/(.*)$" /zuul/$1;

}

location / {

proxy_pass http://192.168.1.101:10010;

proxy_connect_timeout 600;

proxy_read_timeout 600;

}

}

在zuul网关中配置

zuul:

prefix: /api # 添加路由前缀

retryable: true

add-host-header: true # 携带请求本身的host头信息

sensitive-headers: # 禁止使用的头信息,设置为null,否则set-cookie无效

第二种情况

1-有跨域请求时cookie生效的条件

服务的响应头中需要携带Access-Control-Allow-Credentials并且为true。

响应头中的Access-Control-Allow-Origin一定不能为*,必须是指定的域名

浏览器发起ajax需要指定withCredentials 为true

import axios from 'axios'

// 创建axios实例

const service = axios.create({

baseURL: 'http://api.gootschool.com/api', // api的base_url

withCredentials: true, // 解决服务器设置token到cookies中,浏览器Application的cookies中没有存入token

timeout: 20000 // 请求超时时间

})

export default service