日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iframe 中 js 的 cookie 读写不到的解决办法

發(fā)布時(shí)間:2024/9/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iframe 中 js 的 cookie 读写不到的解决办法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

先看一個(gè)例子比如:我們?cè)?www.cr173.com 中用 iframe 了一個(gè) www.fxxz.com 的一個(gè)頁面。

如:

< iframe height="100" marginheight="0" src="http://www.fxxz.com/" frameborder="0" width="970" marginwidth="0" scrolling="no" bordercolor="#000000">< /iframe>

在IE下面 www.fxxz.com 這個(gè)被框住的頁面是無法進(jìn)行COOKIE的讀寫的。

用 document.cookie; 是讀取不到 Cookie值的。

cookie的作用域又是如何界定的呢?

我在一個(gè)文件夾下,比如 d: mp\ 下建了幾個(gè)html文件,我發(fā)現(xiàn)在a.htm中創(chuàng)建的cookie,在b.htm中是可以識(shí)別的。 是不是可以認(rèn)為,只要是同一個(gè)文件夾下的html文件,就可以共享cookie, 當(dāng)然,我是在本機(jī)上做測(cè)試,如果作為一個(gè)網(wǎng)站來講,cookie的作用域又是如何界定的呢?

document.cookie = "username=" + escape(value)+ "; xpires ="+ expiration.toGMTString()+";path=/;domain=localhost; secure"; 就是說.當(dāng)你PATH設(shè)置成/時(shí).你當(dāng)前文件夾或者DOMAIN下的所有子文件及子文件夾里的文件都可以讀到.但當(dāng)設(shè)置為/thispathname就只有DOMAIN/thispathname下的文件及文件夾能讀寫。

其根源也是由于iframe跨站點(diǎn)cookie被阻導(dǎo)致session失效。但是當(dāng)時(shí)因?yàn)閮蓚€(gè)站點(diǎn)都是自有的服務(wù)器,因此通過設(shè)置了相同的父域名解決了此問題,所以后來也就沒有深入研究此問題。
??? 目前在開發(fā)新功能時(shí),又一次遇到了此問題,但是如果仍舊通過更改域名的方式來解決的話,設(shè)計(jì)上可能就會(huì)非常麻煩。于是不得已徹底翻了一下資料,初步研究結(jié)果如下:問題根源: ??? IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)協(xié)議默認(rèn)阻止第三方無隱私安全聲明的cookie,Firefox目前還不支持P3P安全特性,firefox中自然也不存在此問題了。Mircosoft對(duì)此的具體描述可以參見 Privacy in Internet Explorer 6 解決方法: 很簡(jiǎn)單,在要嵌入的內(nèi)容中(iframe指向的站點(diǎn))輸出P3P的主機(jī)頭聲明,步驟如下 (Session variables are lost if you use FRAMESET in Internet Explorer 6):
1.打開IIS管理器 inetmgr 2.選擇被嵌入iframe源站點(diǎn)或者目錄,右鍵點(diǎn)擊打開屬性框 3.切換到HTTP頭 4.添加

5.自定義HTTP頭名: P3P 6.自定義HTTP頭值: CP="CAO PSA OUR"

7.關(guān)閉屬性框退出,即刻生效

我們可以查一下 HTTP 頭信息

http://tool.chinaz.com/pagestatus/

用這里可以查看一下剛剛的設(shè)置:


至于上面CAO PSA OUR的具體意思,還是請(qǐng)參考前面的文章:Privacy in Internet Explorer 6

如果是動(dòng)態(tài)語言可以用下面的添加頭信息的辦法來解決:

PHP
<?php header('P3P: CP="CAO PSA OUR"');//ADD IN THIS LINE IN ORDER TO SOLVE THE INTERNET EXPLORER ALWAYS GET NEW SESSION ISSUEsession_start();$_SESSION['test']='anything';echo$_SESSION['test'];
?>
關(guān)于“用P3P header解決iframe跨域訪問cookie/session”的問題
理論很簡(jiǎn)單,而且模式也和大多請(qǐng)求返回狀態(tài)的SSO差不多.但是有幾個(gè)地方是要注意一下的. 1.頁面里的COOKIE不能是瀏覽器進(jìn)程的COOKIE(包括驗(yàn)證票和不設(shè)置超時(shí)時(shí)間的COOKIE),否則跨域會(huì)取不到.這點(diǎn)做跨域COOKIE的人比較少提到.不過實(shí)際上留意下幾家大學(xué)做的方案,有細(xì)微的提到他們的驗(yàn)證模塊里的COOKIE是有設(shè)置超時(shí)時(shí)間的. 2.當(dāng)利用IFRAME時(shí),記得要在相應(yīng)的動(dòng)態(tài)頁的頁頭添加一下P3P的信息,否則IE會(huì)自覺的把IFRAME框里的COOKIE給阻止掉,產(chǎn)生問題.本身不保存自然就取不到了.這個(gè)其實(shí)是FRAMESET和COOKIE的問題,用FRAME或者IFRAME都會(huì)遇到. 3.測(cè)試時(shí)輸出TRACE,會(huì)減少很多測(cè)試的工作量. 只需要設(shè)置 P3P HTTP Header,在隱含 iframe 里面跨域設(shè)置 cookie 就可以成功。他們所用的內(nèi)容是: P3P: CP='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR'ASP直接在頭部加了頭部申明,測(cè)試有效

<%Response.AddHeader "P3P", "CP=CAO PSA OUR"%> php的話,我沒去試,應(yīng)該是如下寫法: header('P3P: CP=CAO PSA OUR');

ASP.NET的話通過在代碼上加Response.AddHeader("P3P", "CP=CAO PSA OUR") 或者在Window服務(wù)中將ASP.NET State Service 啟動(dòng)。JSP: response.setHeader("P3P","CP=CAO PSA OUR")

總結(jié)

以上是生活随笔為你收集整理的iframe 中 js 的 cookie 读写不到的解决办法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。