PHP關(guān)于IE下的iframe跨域?qū)е聅ession丟失問(wèn)題解決方法
更新時(shí)間:2013年10月10日 16:31:12 作者:
一個(gè)登錄頁(yè)面,被別的網(wǎng)站用iframe嵌進(jìn)去后,死活無(wú)法登錄(只在IE中存在這種情況)。主要是session無(wú)法被保存的問(wèn)題,下面把個(gè)人的解決過(guò)程分享個(gè)大家
今天搞的一個(gè)登錄頁(yè)面,被別的網(wǎng)站用iframe嵌進(jìn)去后,死活無(wú)法登錄(只在IE中存在這種情況)。
很明顯,session無(wú)法被保存。但是直接在地址欄打開那個(gè)登錄頁(yè)面,一切都正常啊。真是奇怪啊。
在網(wǎng)上搜索了一下。發(fā)現(xiàn)這個(gè)問(wèn)題還真有不少人提及到。最后的解決方法是在那個(gè)登錄頁(yè)面里加上以下代碼:
<span style="font-family:Microsoft YaHei; font-size:14px">header('P3P: CP="ALL ADM DEV PSAi COM OUR OTRo STP IND ONL"');
session_start();</span>
可能這個(gè)問(wèn)題跟我的登錄頁(yè)面是采用javascript的location跳轉(zhuǎn)也有關(guān)。但沒(méi)有深入測(cè)試研究。
以下是拓展閱讀:
---------------------------------------------
今天在處理騰訊朋友應(yīng)用的時(shí)候,測(cè)試給我發(fā)來(lái)個(gè)工單,說(shuō)應(yīng)用在IE7 上無(wú)法使用.出現(xiàn)登陸超時(shí)錯(cuò)誤.
第一反應(yīng)是session丟失了.
于是上網(wǎng)找了下 IE7 iframe session丟失問(wèn)題.后來(lái)找到如下文章,問(wèn)題解決:
=============================================
昨天,我在校內(nèi)上做的時(shí)間日記終于上線了。上線第一天有80多個(gè)用戶安裝,但卻以外收到不少用戶的反饋說(shuō)應(yīng)用不可用。我之前都是在firefox上開發(fā)的(估計(jì)校內(nèi)工作人員也是用firefox審核的),在使用IE7測(cè)試時(shí),卻發(fā)現(xiàn)首頁(yè)之外的頁(yè)面全都無(wú)法正常打開。
在網(wǎng)上查找了許多資料,發(fā)現(xiàn)在IE7中存在這樣的問(wèn)題:如果頁(yè)面中存在著一個(gè)或多個(gè)iframe的子頁(yè)面,那么在子頁(yè)面中創(chuàng)建session可能無(wú) 法成功,這樣session數(shù)據(jù)就無(wú)法和其他頁(yè)面所共享。在開發(fā)校內(nèi)、51應(yīng)用時(shí),假設(shè)采用iframe方式,很可能會(huì)遇到這樣的問(wèn)題。而且這個(gè)問(wèn)題只存 在于IE7瀏覽器中,我在firefox, IE6和chrome等瀏覽器中測(cè)試均沒(méi)有問(wèn)題。
解決方案是:在運(yùn)行session_start之前,在程序中加上如下一句(以php語(yǔ)言為例),大致是向?yàn)g覽器聲明一下安全級(jí)別,這樣iframe子頁(yè)面在創(chuàng)建session時(shí)就不會(huì)有問(wèn)題了:
header('P3P: CP=”ALL ADM DEV PSAi COM OUR OTRo STP IND ONL”‘);
另外,我還了解到:如果二級(jí)域名中包含了下劃線,如:your_domain.yourhost.com,在建立和傳遞session時(shí)也可能會(huì)出現(xiàn)問(wèn)題。
一點(diǎn)感想:
1)時(shí)隔多年,瀏覽器兼容性問(wèn)題仍然沒(méi)有得到徹底解決,IE瀏覽器仍然是那么讓開發(fā)者感到痛苦和折磨。
2)發(fā)布應(yīng)用前,一定要經(jīng)過(guò)嚴(yán)密的瀏覽器兼容性測(cè)試,否則就有可能損失應(yīng)用的第一批用戶。
==============================================
其他參考文章:
==============================================
解決iframe中jsessionid無(wú)法傳遞導(dǎo)致session丟失的問(wèn)題
http://618119.com/archives/2007/12/19/48.html
在實(shí)現(xiàn) ISMP2.1.1 接口的適合需要用到sso,而ISMP里定義的接口是需要在iframe等嵌入頁(yè)面中調(diào)用sso接口,在實(shí)際開發(fā)中發(fā)現(xiàn)session無(wú)法正常傳遞。
重現(xiàn)問(wèn)題的場(chǎng)景是:
1.先訪問(wèn)a站點(diǎn):http://192.168.18.2/test.jsp
test.jsp的代碼為:
<html>
<head>
<title> 618119.com </title>
</head>
<body>
<iframe src=”http://192.168.18.3/sso.jsp?ssoinfo=xxxx “>
</iframe>
</body>
</html>
sso .jsp里讀取傳遞的ssoinfo,反向調(diào)用ISMP認(rèn)證接口,
生成session,然后放入指定的屬性值,
session .setAttribute(“ssoUser”,”lizongbo”);
頁(yè)面再重定向到 http://192.168.18.3/iframe.jsp
response.sendRedirect(“/iframe.jsp”);
iframe.jsp中讀取session中ssoUser的屬性值,會(huì)發(fā)現(xiàn)無(wú)法讀取。
2.如果先訪問(wèn)了 192.168.18.3的頁(yè)面,再訪問(wèn)192.168.18.2的頁(yè)面,此時(shí)的iframe嵌入是可以傳遞已生成好的jsessionid Cookie.
因此解決的辦法有:
a.在url中加上jsessionid.
例如重定向到 response.sendRedirect(“/iframe.jsp;jsessionid =lizongbo”);
而這種情況下,如果iframe.jsp頁(yè)面內(nèi)的其它連接的url沒(méi)有加上jsessionid,
也無(wú)法繼續(xù)傳遞session,不過(guò)通過(guò)在客戶端的js來(lái)為每個(gè)超連接的href屬性重寫加上jsessionid.
b.sso.jsp里設(shè)置P3P頭信息
例如 P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”
或 P3P:CP=”CAO PSA OUR”
java代碼為:
response.addHeader(“P3P”,”/”CAO PSA OUR/”");
很明顯,session無(wú)法被保存。但是直接在地址欄打開那個(gè)登錄頁(yè)面,一切都正常啊。真是奇怪啊。
在網(wǎng)上搜索了一下。發(fā)現(xiàn)這個(gè)問(wèn)題還真有不少人提及到。最后的解決方法是在那個(gè)登錄頁(yè)面里加上以下代碼:
復(fù)制代碼 代碼如下:
<span style="font-family:Microsoft YaHei; font-size:14px">header('P3P: CP="ALL ADM DEV PSAi COM OUR OTRo STP IND ONL"');
session_start();</span>
可能這個(gè)問(wèn)題跟我的登錄頁(yè)面是采用javascript的location跳轉(zhuǎn)也有關(guān)。但沒(méi)有深入測(cè)試研究。
以下是拓展閱讀:
---------------------------------------------
今天在處理騰訊朋友應(yīng)用的時(shí)候,測(cè)試給我發(fā)來(lái)個(gè)工單,說(shuō)應(yīng)用在IE7 上無(wú)法使用.出現(xiàn)登陸超時(shí)錯(cuò)誤.
第一反應(yīng)是session丟失了.
于是上網(wǎng)找了下 IE7 iframe session丟失問(wèn)題.后來(lái)找到如下文章,問(wèn)題解決:
=============================================
昨天,我在校內(nèi)上做的時(shí)間日記終于上線了。上線第一天有80多個(gè)用戶安裝,但卻以外收到不少用戶的反饋說(shuō)應(yīng)用不可用。我之前都是在firefox上開發(fā)的(估計(jì)校內(nèi)工作人員也是用firefox審核的),在使用IE7測(cè)試時(shí),卻發(fā)現(xiàn)首頁(yè)之外的頁(yè)面全都無(wú)法正常打開。
在網(wǎng)上查找了許多資料,發(fā)現(xiàn)在IE7中存在這樣的問(wèn)題:如果頁(yè)面中存在著一個(gè)或多個(gè)iframe的子頁(yè)面,那么在子頁(yè)面中創(chuàng)建session可能無(wú) 法成功,這樣session數(shù)據(jù)就無(wú)法和其他頁(yè)面所共享。在開發(fā)校內(nèi)、51應(yīng)用時(shí),假設(shè)采用iframe方式,很可能會(huì)遇到這樣的問(wèn)題。而且這個(gè)問(wèn)題只存 在于IE7瀏覽器中,我在firefox, IE6和chrome等瀏覽器中測(cè)試均沒(méi)有問(wèn)題。
解決方案是:在運(yùn)行session_start之前,在程序中加上如下一句(以php語(yǔ)言為例),大致是向?yàn)g覽器聲明一下安全級(jí)別,這樣iframe子頁(yè)面在創(chuàng)建session時(shí)就不會(huì)有問(wèn)題了:
header('P3P: CP=”ALL ADM DEV PSAi COM OUR OTRo STP IND ONL”‘);
另外,我還了解到:如果二級(jí)域名中包含了下劃線,如:your_domain.yourhost.com,在建立和傳遞session時(shí)也可能會(huì)出現(xiàn)問(wèn)題。
一點(diǎn)感想:
1)時(shí)隔多年,瀏覽器兼容性問(wèn)題仍然沒(méi)有得到徹底解決,IE瀏覽器仍然是那么讓開發(fā)者感到痛苦和折磨。
2)發(fā)布應(yīng)用前,一定要經(jīng)過(guò)嚴(yán)密的瀏覽器兼容性測(cè)試,否則就有可能損失應(yīng)用的第一批用戶。
==============================================
其他參考文章:
==============================================
解決iframe中jsessionid無(wú)法傳遞導(dǎo)致session丟失的問(wèn)題
http://618119.com/archives/2007/12/19/48.html
在實(shí)現(xiàn) ISMP2.1.1 接口的適合需要用到sso,而ISMP里定義的接口是需要在iframe等嵌入頁(yè)面中調(diào)用sso接口,在實(shí)際開發(fā)中發(fā)現(xiàn)session無(wú)法正常傳遞。
重現(xiàn)問(wèn)題的場(chǎng)景是:
1.先訪問(wèn)a站點(diǎn):http://192.168.18.2/test.jsp
test.jsp的代碼為:
復(fù)制代碼 代碼如下:
<html>
<head>
<title> 618119.com </title>
</head>
<body>
<iframe src=”http://192.168.18.3/sso.jsp?ssoinfo=xxxx “>
</iframe>
</body>
</html>
sso .jsp里讀取傳遞的ssoinfo,反向調(diào)用ISMP認(rèn)證接口,
生成session,然后放入指定的屬性值,
session .setAttribute(“ssoUser”,”lizongbo”);
頁(yè)面再重定向到 http://192.168.18.3/iframe.jsp
response.sendRedirect(“/iframe.jsp”);
iframe.jsp中讀取session中ssoUser的屬性值,會(huì)發(fā)現(xiàn)無(wú)法讀取。
2.如果先訪問(wèn)了 192.168.18.3的頁(yè)面,再訪問(wèn)192.168.18.2的頁(yè)面,此時(shí)的iframe嵌入是可以傳遞已生成好的jsessionid Cookie.
因此解決的辦法有:
a.在url中加上jsessionid.
例如重定向到 response.sendRedirect(“/iframe.jsp;jsessionid =lizongbo”);
而這種情況下,如果iframe.jsp頁(yè)面內(nèi)的其它連接的url沒(méi)有加上jsessionid,
也無(wú)法繼續(xù)傳遞session,不過(guò)通過(guò)在客戶端的js來(lái)為每個(gè)超連接的href屬性重寫加上jsessionid.
b.sso.jsp里設(shè)置P3P頭信息
例如 P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”
或 P3P:CP=”CAO PSA OUR”
java代碼為:
response.addHeader(“P3P”,”/”CAO PSA OUR/”");
相關(guān)文章
PHP多進(jìn)程編程之僵尸進(jìn)程問(wèn)題的理解
這篇文章主要介紹了PHP多進(jìn)程編程之僵尸進(jìn)程問(wèn)題的理解的相關(guān)資料,希望通過(guò)本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10
wamp服務(wù)器訪問(wèn)php非常緩慢的解決過(guò)程
這篇文章主要介紹了wamp服務(wù)器訪問(wèn)php非常緩慢的解決過(guò)程,十分的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2015-07-07
php實(shí)現(xiàn)對(duì)兩個(gè)數(shù)組進(jìn)行減法操作的方法
這篇文章主要介紹了php實(shí)現(xiàn)對(duì)兩個(gè)數(shù)組進(jìn)行減法操作的方法,涉及php操作數(shù)組的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-04-04
php rmdir使用遞歸函數(shù)刪除非空目錄實(shí)例詳解
我們大家都知道,php rmdir()函數(shù)用于刪除空目錄,但如果要?jiǎng)h除非空目錄,我們必須將非空目錄中的文件或子目錄刪除,本文章向大家介紹php如何使用遞歸函數(shù)刪除非空目錄,需要的朋友可以參考一下2016-10-10
PHP使用標(biāo)準(zhǔn)庫(kù)spl實(shí)現(xiàn)的觀察者模式示例
這篇文章主要介紹了PHP使用標(biāo)準(zhǔn)庫(kù)spl實(shí)現(xiàn)的觀察者模式,結(jié)合實(shí)例形式分析了php基于spl標(biāo)準(zhǔn)庫(kù)的觀察者模式相關(guān)實(shí)現(xiàn)與使用操作技巧,需要的朋友可以參考下2018-08-08
PHP中include和require的區(qū)別實(shí)例分析
網(wǎng)上太多關(guān)于PHP中include與require區(qū)別。然而事實(shí)真的如此嗎,今天我們就通過(guò)一個(gè)具體的實(shí)例來(lái)簡(jiǎn)單分析驗(yàn)證下2017-05-05

