一、問題
登錄成功后后端把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; # 轉(zhuǎn)發(fā)時称开,攜帶本身的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網(wǎng)關(guān)中配置
zuul:
prefix: /api # 添加路由前綴
retryable: true
add-host-header: true # 攜帶請求本身的host頭信息
sensitive-headers: # 禁止使用的頭信息扔水,設(shè)置為null痛侍,否則set-cookie無效
第二種情況
1-有跨域請求時cookie生效的條件
- 服務(wù)的響應(yīng)頭中需要攜帶Access-Control-Allow-Credentials并且為true。
- 響應(yīng)頭中的Access-Control-Allow-Origin一定不能為*魔市,必須是指定的域名
- 瀏覽器發(fā)起ajax需要指定withCredentials 為true
import axios from 'axios'
// 創(chuàng)建axios實例
const service = axios.create({
baseURL: 'http://api.gootschool.com/api', // api的base_url
withCredentials: true, // 解決服務(wù)器設(shè)置token到cookies中,瀏覽器Application的cookies中沒有存入token
timeout: 20000 // 請求超時時間
})
export default service