iframe跨域session丟失問題
最近在做一個系統(A),需要在系統(A)中整合目前現存系統(B)的功能。
當然,系統(B)功能在訪問時做了登陸限制。(一般性都是:系統登陸後把userId放入session中,在具體的功能頁面加入session中userId的判斷,
如果session中userId不存在,則跳到登陸頁,否則繼續載入並正常顯示功能。)
那麼,在系統(A)中要訪問系統(B)的功能無非是要繞過系統(B)的登陸。(一般的做法是先跳轉到系統(B)中的一個頁面,在這個頁面裡將userId塞入session中,
再自動跳轉到實際要訪問的功能頁面)
以上做法,在不使用框架結構時,是可行的,確切的說是很簡單的。
但是如果,系統(A)使用了框架結構,即系統(B)中的功能頁面要嵌入到系統(A)的框架中,則會出現一些意想不到的問題,
確切說是系統(B)跳轉到了登陸頁面,session丟失了。
為什麼會這樣呢?
因為應用需求在一個頁面的不同frame下面訪問不同的域,結果造成了session丟失。
問題根源:
IE6/IE7支援的P3P(Platform for Privacy Preferences Project (P3P) specification)協議預設阻止第三方無隱私安全宣告的cookie,Firefox目前還不支援P3P安全特性,firefox中自然也不存在此問題了。Mircosoft對此的具體描述可以參見 Privacy in Internet Explorer 6
解決辦法是在要嵌入的內容中(iframe指向的站點)輸出P3P的主機頭宣告:
php:
header('P3P:CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"');
asp.net:
HttpContext.Current.Response.AddHeader("p3p", "CP=\""IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""")
jsp:
response.setHeader("P3P","CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'")
ColdFusion:
<cfheader name="P3P" value="CP='IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT'" />
相關文章
- 前後端分離解決session跨域丟失問題後端Session跨域
- IFrame跨域問題筆記跨域筆記
- 關於Session值丟失問題Session
- iframe 元素跨域訪問跨域
- 請教tomcat session丟失問題TomcatSession
- IE中iframe跨域訪問跨域
- Nginx session丟失問題處理解決方法NginxSession
- 使用 postMessage 解決 iframe 跨域通訊問題跨域
- Spring Boot+AngularJS中因為跨域導致Session丟失Spring BootAngularJS跨域Session
- session定義使用和丟失問題小結Session
- js window.location.href之後,session丟失的問題JSSession
- SpringBoot 2.0 SpringSession 支援跨域session問題Spring BootGseSession跨域
- 跨域問題跨域
- 跨域問題(普通跨域和springsecurity跨域)跨域SpringGse
- struts中session丟失Session
- 搞懂:前端跨域問題JS解決跨域問題VUE代理解決跨域問題原理前端跨域JSVue
- iframe 跨域高度自適應跨域
- 如何獲取跨域iframe高度跨域
- 獲取登入驗證碼失敗及前後端不同域導致session丟失問題分析記錄後端Session
- Vue嵌入iframe,iframe如何跨域呼叫vue內路由Vue跨域路由
- AJAX 跨域問題跨域
- js -- 跨域問題JS跨域
- VUE跨域問題Vue跨域
- djangorestjwtvue跨域問題DjangoRESTJWTVue跨域
- 前端跨域問題前端跨域
- js跨域問題JS跨域
- Ajax跨域問題跨域
- Nginx跨域問題Nginx跨域
- 急救:叢集session丟失!Session
- iframe跨域的幾種常用方法跨域
- php跨域共享sessionPHP跨域Session
- GoldenGate更新丟失問題Go
- 跨域問題及Umi中使用proxy代理解決跨域問題跨域
- PHP中SESSION丟失(不能跨頁面傳遞)解決辦法PHPSession
- React如何解決fetch跨域請求時session失效問題React跨域Session
- Laravel 中跨域問題Laravel跨域
- 關於跨域問題跨域
- 跨域問題總結跨域