瀏覽器同源策略阻擋跨域 Cookie 寫入與 AJAX 請求。本文提供兩招組合拳:P3P 隱私原則標頭 解除 IE 阻擋,JSONP 繞過跨域 AJAX 限制。
www.A.com 需呼叫 www.B.com 介面並寫入 Cookie。// www.B.com 內的頁面/Handler
context.Response.AddHeader("P3P", "CP=CAO PSA OUR");
context.Response.Cookies["Token"].Value = "abc123"; // 現在可寫入
CP=CAO PSA OUR 為精簡版隱私原則聲明,足以讓 IE 接受第三方 Cookie。// B 域 Handler 回傳 JSONP
context.Response.ContentType = "text/plain";
context.Response.Write(string.Format("{0}('OK')", context.Request["callback"]));
// A 域前端
$.ajax({
url: "https://www.B.com/Handler.ashx",
dataType: "jsonp", // 自動加 callback 參數
success: function(data) {
window.location.href = "https://www.B.com/TargetPage"; // 跳轉帶 Cookie
}
});
callback('OK')。success 回調跳轉至 B 域目標頁,Cookie 隨請求自動帶上。Access-Control-Allow-Origin: https://www.A.com + Access-Control-Allow-Credentials: true (需 HTTPS、SameSite=None)。