關(guān)于Iframe如何跨域訪問Cookie和Session的解決方法
最近做登錄系統(tǒng)的整合,其中遇到的一個最關(guān)鍵的問題為在一個統(tǒng)一的后臺里需要無障礙的訪問另外一個系統(tǒng)后臺,這個系統(tǒng)是第三方提供的一個加過密的系統(tǒng),后臺自動登錄接口是自己分析出來的,沒有單獨提供,當從統(tǒng)一后臺通過自動登錄接口登錄時,系統(tǒng)直接跳轉(zhuǎn)到系統(tǒng)后臺首頁,后臺登錄成功后所跳轉(zhuǎn)的URL這里沒法指定,控制不了跳轉(zhuǎn)的頁面,如果在統(tǒng)一后臺里需要鏈接到這個系統(tǒng)后臺的另外一個頁面,而非后臺默認首頁時,也就是將第三方系統(tǒng)后臺的菜單功能放到我們這個統(tǒng)一后臺里。
對于這樣的一個需要,這里會遇到一個問題,為了能正常訪問第三方系統(tǒng)的后臺欄目,必需確保已經(jīng)登錄該系統(tǒng),否則會提示用戶登錄,所以在點擊這些菜單鏈接時,系統(tǒng)必需已經(jīng)登錄。
為了解決這個問題,在頁面頭部添加了一個不可見的iframe,使其指向到自動登錄接口,這個接口如果正常通過瀏覽器地址欄訪問,當用戶名和密碼驗證無誤時,會跳轉(zhuǎn)到系統(tǒng)后臺首頁,由于此時放在了一個不可見的IFRAME中,所以跳轉(zhuǎn)對當前后臺頁面沒有任何影響。按照我的設計方法,系統(tǒng)應該就可以正常使用了。
但,既然說到但了,就說明肯定遇到了問題,不然這里不會來這么大的一個轉(zhuǎn)折的。
但由于這里各系統(tǒng)均屬于不同的系統(tǒng),域名不一樣,所以出現(xiàn)了Iframe在IE中,不能正常生成第三方系統(tǒng)Cookie的情況,但在Firefox和其它瀏覽器中均可生成,所以用IE訪問時,總是跳轉(zhuǎn)到登錄頁面。
這里需要說明一下,這里的第三方系統(tǒng)放在我們自己的服務器上的,只是所有源碼加了密!
最后查閱了相關(guān)資料后,發(fā)現(xiàn)在IE中,為了安全,阻止了通過IFRAME生成第三方域的COOKIE,為了解決這個問題,MS規(guī)定只要在HTTP的HEADER頭中,設定P3P這個頭,就可以通過IFRAME來生成第三方COOKIE了。
PHP中,P3P HEADER 頭的設置方法如下:
header(‘P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”‘);
注意:這里的P3P需要添加到第三方域生成Cookie的那個文件才生效,否則無濟于事。
這里又有問題了,第三方系統(tǒng)生成COOKIE在后臺的一個叫admin.php的頁面里生成的,而這個頁面又是加過密的,這可怎么辦了,想了很久,最后同事靈機一動,說我們可以用我們自己的文件來包含它??浚@方法太妙了,為什么我就沒有想到了,同事真是太有才了,真是佩服的五體投地,當然,我對他這么一佩服,據(jù)他說自己當晚也自己佩服了自己一晚上。
所以最后的解決方案為將原來的admin.php文件命名為admin_2.php,然后新建admin.php,最后在這個文件中,添加上面所的P3P這個HEADER頭,并再次包含 admin_2.php這個文件,最終代碼如下:
header(‘P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”‘);
include “admin_2.php”;
最后,問題徹底解決!
這里標題是COOKIE和SESSION的問題,實質(zhì)上,基本上是一回事,SEESION最終的保存也是通過SESSION_ID保存到COOKIE源碼天空,然后通過這個SID到服務器上找相應的SEESION數(shù)據(jù),只要把COOKIE里的SEESION_ID這個COOKIE給刪掉,SESSION也就失效了。
- 利用nginx解決cookie跨域訪問的方法
- 用jQuery與JSONP輕松解決跨域訪問的問題
- jQuery 跨域訪問問題解決方法
- Ajax實現(xiàn)跨域訪問的三種方法
- Javascript 跨域訪問解決方案
- js iframe跨域訪問(同主域/非同主域)分別深入介紹
- Ajax 設置Access-Control-Allow-Origin實現(xiàn)跨域訪問
- jquery下利用jsonp跨域訪問實現(xiàn)方法
- JQuery Ajax 跨域訪問的解決方案
- AJAX javascript的跨域訪問執(zhí)行
- 解決AJAX中跨域訪問出現(xiàn)''沒有權(quán)限''的錯誤
- Python的Django應用程序解決AJAX跨域訪問問題的方法
- AJAX的跨域訪問-兩種有效的解決方法介紹
- 深入淺析同源策略和跨域訪問
- js實現(xiàn)跨域訪問的三種方法
- AJax與Jsonp跨域訪問問題小結(jié)
- jquery 跨域訪問問題解決方法(筆記)
- 淺談Ajax跨域Session和跨域訪問
- 解決nginx/apache靜態(tài)資源跨域訪問問題詳解
相關(guān)文章
php中isset與empty函數(shù)的困惑與用法分析
這篇文章主要介紹了php中isset與empty函數(shù)的困惑與用法,結(jié)合實例形式分析了php中isset與empty函數(shù)的功能、用法、區(qū)別及相關(guān)使用注意事項,需要的朋友可以參考下2019-07-07
PHP setcookie() cannot modify header information 的解決方法
PHP setcookie() 報 cannot modify header information 錯誤的解決方法2009-01-01
php 智能404跳轉(zhuǎn)代碼,適合換域名沒改變目錄的網(wǎng)站
適合于換域名,但是目錄沒有改變的網(wǎng)站.也可以用做301定向.轉(zhuǎn)自于落伍,收集過來.怕以后需要.需要的兄弟直接copy過去即可.2010-06-06
PHP similar_text 字符串的相似性比較函數(shù)
PHP尋找兩個字符串的相似性的similar_text ()函數(shù)使用方法2010-05-05
php自定義urlencode,urldecode函數(shù)實例
這篇文章主要介紹了php自定義urlencode,urldecode函數(shù),實例分析了php字符串轉(zhuǎn)碼的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-03-03
php實現(xiàn)xml與json之間的相互轉(zhuǎn)換功能實例
這篇文章主要介紹了php實現(xiàn)xml與json之間的相互轉(zhuǎn)換功能,結(jié)合實例形式分析了php實現(xiàn)xml轉(zhuǎn)json及json轉(zhuǎn)xml的相關(guān)原理與實現(xiàn)技巧,具有一定參考借鑒價值2016-07-07

