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


第一种情况(我的不是这种情况)
由于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
网友评论