首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

ASP.NET 跨域請求與跨域 Cookie 寫入解決方案:P3P 標頭 + JSONP

     編輯:ASP.NET 基礎

瀏覽器同源策略阻擋跨域 Cookie 寫入與 AJAX 請求。本文提供兩招組合拳:P3P 隱私原則標頭 解除 IE 阻擋,JSONP 繞過跨域 AJAX 限制。

問題場景

  • 主站 www.A.com 需呼叫 www.B.com 介面並寫入 Cookie。
  • IE 預設阻擋第三方 Cookie,AJAX 直接請求被同源策略攔截。

方案一:B 域頁面輸出 P3P 標頭 (允許 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。
  • 現代瀏覽器 (Chrome/Firefox/Edge) 漸進封鎖第三方 Cookie,長期建議改用 SameSite=None; Secure + 主動授權流程。

方案二:A 域用 JSONP 呼叫 B 域介面

// 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
    }
});

完整流程

  1. A 頁面發起 JSONP 請求 B 介面。
  2. B 介面輸出 P3P 標頭並寫入 Cookie,回傳 callback('OK')。
  3. A 端 success 回調跳轉至 B 域目標頁,Cookie 隨請求自動帶上。

現代替代方案

  • CORS:Access-Control-Allow-Origin: https://www.A.com + Access-Control-Allow-Credentials: true (需 HTTPS、SameSite=None)。
  • PostMessage:跨域 iframe 通訊。
  • OAuth/OIDC:標準授權碼流程,Token 存在 LocalStorage/IndexedDB。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved