cookie跨域共享

問題描述

須要解決前端pc跟服務端(java),跨域後都能獲取到同一個cookie。
使用二級域名共享cookie有一個限制條件,就是兩個域名的二級域名必須相同前端

前端pc訪問域名:a.b.com
後端接口域名:a-gateway.b.com
這兩個域名同屬一個二級域名:b.comvue

跨域訪問

服務器nginx增長如下配置,便可解決跨域訪問的問題。也能夠在程序中經過代碼解決跨域訪問。java

  • nginx配置文件
location / {
    #是否容許跨域發送Cookie
    add_header Access-Control-Allow-Credentials true;
    add_header Access-Control-Allow-Origin 'http://a.b.com';
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';

    if ($request_method = 'OPTIONS') {
        return 204;
    }
}
複製代碼

跨域攜帶發送cookie

若是須要容許跨域攜帶發送cookie的話,nignx則須要如下參數配置ios

  • nginx配置
  1. "Access-Control-Allow-Credentials":可選字段。它的值是一個布爾值,表示是否容許發送Cookie。默認狀況下,Cookie不包括在CORS請求之中。設爲true,即表示服務器明確許可,Cookie能夠包含在請求中,一塊兒發給服務器。這個值也只能設爲true,若是服務器不要瀏覽器發送Cookie,刪除該字段便可。
  2. 對於附帶身份憑證的請求,服務器不得設置 Access-Control-Allow-Origin 的值爲'*'。這是由於請求的首部中攜帶了Cookie信息,若是 Access-Control-Allow-Origin 的值爲'*',請求將會失敗。而將 Access-Control-Allow-Origin 的值設置爲 a.b.com,則請求將成功執行。也就是說Access-Control-Allow-Credentials設置爲true的狀況下 Access-Control-Allow-Origin不能設置爲*。
  • 前端配置
    以vue請求爲例:
import axios from 'axios';
axios.defaults.withCredentials=true //容許攜帶cookie
複製代碼
  • java設置cookie
public static void  addCookie(HttpServletResponse response,String cookieName,String cookieValue,int maxAge){
    Cookie cookie  =new Cookie(cookieName,cookieValue);
    cookie.setDomain("b.com");//指定域名
    cookie.setPath("/");//設置cookie的生命週期
    cookie.setHttpOnly(false);
    if(maxAge>0){
        cookie.setMaxAge(maxAge);
    }
    response.addCookie(cookie);
}
複製代碼
相關文章
相關標籤/搜索