美文网首页
Response中set-cookie里的值不能写入浏览器coo

Response中set-cookie里的值不能写入浏览器coo

作者: 紫荆秋雪_文 | 来源:发表于2019-12-31 21:54 被阅读0次

一、问题

登录成功后后端把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

相关文章

网友评论

      本文标题:Response中set-cookie里的值不能写入浏览器coo

      本文链接:https://www.haomeiwen.com/subject/vmrkoctx.html