如何使用iframe实现跨域写入cookie 并且兼容大部分浏览器

yyl8781697 2013-09-06 09:28:45
最近在做单点登录的时候需要使用iframe来实现跨域写入cookie,此功能在chrome,ff中测试均可以通过,但是在ie中却异常不稳定,尤其在ie8(因为电脑上暂时没有ie6,7的测试环境)中,后来发现是由于ie的安全机制引起的,对iframe跨域写入的cookie不信任,导致无法读取

在查资料的时候查看到了这篇文章http://www.iteye.com/problems/81543

但是按照上面的方法做了之后还是会经常不稳定,出问题,问问各位有没有做过类似iframe跨域写入cookie 兼容全部浏览器的,
最高300全丢了
...全文
10311 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
llxdt 2014-06-27
  • 打赏
  • 举报
回复 1
给楼主一个方案吧,使用object模拟iframe,不使用iframe框架
<html>
<head>
	<meta http-equiv="content-type" content="text/html; charset=gb2312"/>
	<meta http-equiv="Content-Script-Type" Content="text/javascript"/>
	<meta http-equiv="Content-Style-Type" content="text/css"/>
	<meta http-equiv="Author" content="Langtse"/>
	<title>使用Object实现Iframe功能</title>
	
	<style>
	#iframe{border:1px solid silver;width:640px;height:480px;padding:2px;}
	object{border:1px solid silver;width:638px;height:478px;}
	</style>
	 
	<script>
	function btnClick(sUrl){
	  var ifra=document.getElementById("iframe");
	  ifra.innerHTML='<object id="obj1" type="text/html" data="'+sUrl+'"></object>';
	}
</script>
    <script>
    
    </script>
</head>
<body>
    <form>
	<input name="url" size="60" type="text" value="login.html" />
	<input type="button" onClick="btnClick(this.form.url.value);" value="打开网页" />
	</form>
 
	<div id="iframe"><p>使用Object实现Iframe功能</p>这里显示你打开的页面内容</div>
</body>
</html>
-Arvin 2014-03-31
  • 打赏
  • 举报
回复
我也是被IE8搞死了 ,楼主解决没 跪求
yyl8781697 2013-09-06
  • 打赏
  • 举报
回复
引用 4 楼 Chinajiyong 的回复:
通过在代码上加 Response.AddHeader("P3P", "CP=CAO PSA OUR"); 或者在Window服务中将ASP.NET State Service 启动。
不知道版主你亲自实验过了没,至少我加上 p3p的头部在ie8浏览器上测试还不是行的哦, 我查看资料说P3p是支持6,7版本的,ie8并不支持呢。。。
微工程 2013-09-06
  • 打赏
  • 举报
回复
context.Response.AddHeader("P3P", "CP=CAO PSA OUR");
EnForGrass 2013-09-06
  • 打赏
  • 举报
回复
通过在代码上加 Response.AddHeader("P3P", "CP=CAO PSA OUR"); 或者在Window服务中将ASP.NET State Service 启动。
yyl8781697 2013-09-06
  • 打赏
  • 举报
回复
引用 1 楼 Chinajiyong 的回复:
假如 在网站www.A.com下通过iframe或ajax调用www.B.com下的内容时,默认情况下IE会阻止www.B.com写任何Cookie //www.B.com里的被调用的页面需要写P3P头,从而解除IE对写Cookie的阻止 context.Response.AddHeader("P3P", "CP=CAO PSA OUR"); //www.A.com里通过ajax调用www.B.com里的内容时,是跨域访问,需要使用jsonp,为配合其工作需要添加下面两句,生成jsonp返回 context.Response.ContentType = "text/plain"; context.Response.Write(string.Format("{0}('OK')", context.Request["callback"]));

//jsonp调用进行跨域访问 
jQuery.ajax({ 
url: url, 
type: 'GET', 
data: data, 
dataType: 'jsonp', 
success: function (data) { 
window.location.href = toURL; 
} 
}); 
ie8里面貌似不认这个p3p的头部的,帖子链接的文件里面提到了XDomainRequestAllowed设置为1 这个,但是我设置了在ie8中还不是不管用
EnForGrass 2013-09-06
  • 打赏
  • 举报
回复
当页面存在iframe时,想要获取iframe框架里面的cookie,就要在iframe相应的动态页面里添加P3P Header信息,否则在IE下获取不到。因为IE有安全策略,限制頁面不保存第三方cookie(注:当前访问页面为第一方cookie,第三方cookie就是当前网页以外的其他网页的cookie)。
EnForGrass 2013-09-06
  • 打赏
  • 举报
回复
假如 在网站www.A.com下通过iframe或ajax调用www.B.com下的内容时,默认情况下IE会阻止www.B.com写任何Cookie //www.B.com里的被调用的页面需要写P3P头,从而解除IE对写Cookie的阻止 context.Response.AddHeader("P3P", "CP=CAO PSA OUR"); //www.A.com里通过ajax调用www.B.com里的内容时,是跨域访问,需要使用jsonp,为配合其工作需要添加下面两句,生成jsonp返回 context.Response.ContentType = "text/plain"; context.Response.Write(string.Format("{0}('OK')", context.Request["callback"]));

//jsonp调用进行跨域访问 
jQuery.ajax({ 
url: url, 
type: 'GET', 
data: data, 
dataType: 'jsonp', 
success: function (data) { 
window.location.href = toURL; 
} 
}); 
本文实例讲述了js检测iframe是否加载完成的方法。分享给大家供大家参考,具体如下: 这里是继上一篇《js实现iframe框架取值的方法(兼容IE,firefox,chrome等)》的扩展应用: 应用场景:iframe个人感觉最独特的应用之一就是配合P3P协议可以实现跨域写入cookie(好象除此之外,还没找到更有效的办法),但是有时候我们不知道这个iframe页面是否执行完毕,有没有办法判断iframe里的页面是否load完成了呢? iframe1.html: <html> <head> <title>框架内页</title> </head> <body>

62,040

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧