網站 A 以 <iframe> 嵌入網站 B 的登入頁。在 IE(含 IE11)中,iframe 內的 Session 無法寫入/讀取,導致登入失敗;Chrome、Firefox 正常。直接訪問網站 B 網址則無問題。
IE 對「第三方 Cookie」(iframe 跨域 Cookie)預設封鎖,除非伺服器傳送 P3P (Platform for Privacy Preferences) 標頭聲明隱私政策,IE 才允許在 iframe 中接受/發送 Cookie,進而維持 Session。
<?php
// 必須在 session_start() 之前,且在任何輸出之前
header('P3P: CP="ALL ADM DEV PSAi COM OUR OTRo STP IND ONL"');
session_start();
// 後續登入邏輯...
?>
CP="..." 為簡略政策代碼,常用組合:
ALL:所有資料類型ADM:行政用途DEV:開發改善PSAi:偽匿名決定支援COM:商務用途OUR:自身及關聯實體OTRo:其他接收方(選擇性)STP:保留期限依政策IND:個體決策ONL:線上聯繫亦可使用精簡版 CP="CAO PSA OUR"(Microsoft 官方範例)。
response.addHeader("P3P", "CP=\"CAO PSA OUR\"");
session_start() 在標頭之後。your_domain.com),IE 對含底線網域的 Cookie 處理有缺陷,建議避免使用底線。location.href JS 導向,確保導向目標同樣輸出 P3P 標頭。