iframe跨域无法携带cookie(前端iframe跨域)
如何使用iframe实现跨域写入cookie 并且兼容大部分浏览器
请首先修改hosts文件来模拟本机跨域
127.0.0.1 localhost
127.0.0.1 b.com
127.0.0.1 a.com
我们的目的:
由a.com登录,如果登录成功,就生成a.com的cookie。而对于b.com则无需再次登录。
遇到的困难:
浏览器同源策略限制,即A站点页面的脚本是无法直接操纵B站点的内容。
试想如果所有第三方网站都可以对taobao.com的首页任意篡改,那这个社会还有什么安全性可言呢?
其实浏览器的安全策略逻辑很简单,就是我的地盘我做主,出了我的地盘我做不了主。
解决方案:
a.com根据用户输入操作a.com的cookie,b.com根据用户在a.com得到的输入数据来操作b.com的cookie。
如何在a.com用户输入a.com的用户数据时同时提交到b.com的验证页面呢?
这时候iframe就派上用场了。
相关代码:
form method="post" action="?php print $b?setcookie.php" target="ifrm" fieldset
legend跨域获取cookie/legend
b用户名/b
p
input type="text" id ="username" name="username"/
/p
pbutton onclick="login()" type="submit"Login/button/p
/fieldset
/form
...
iframe id ="ifrm" name="ifrm" style="display:none;" src="?php print $b?setcookie.php" /
请注意form表单的相关属性,b.com/setcookie.php页面就是验证a.com用户的输入然后生成b.com的cookie,这样后续访问b.com无需再次输入用户名和密码。
缺点:
需要先设置跨域站点的cookie然后再来设置本域的cookie;
如果跨域站点请求耗时较长,直接影响本域的操作时间;
另外也需要额外的代码来处理跨域站点请求失败后的操作
IE中需要设置接受cookie(隐私),这一点比较不方便。
附件:/Files/1000/xdm.rar
测试方法:
1)按文章开头修改hosts文件
2)登录a.com/default.php
3)输入表单数据
4)点击a.com/default.php下面的链接就可以在b.com/getcookie.php看到b.com的cookie
Iframe下面怎么怎么跨域实现共享cookie,P3P的方法我试了为什么不行?,那位朋友能给具体的说下,谢谢!
这个是先执行外循环 a=1 for ( a=1 ; a= 6 ; a++) ,然后执行内循环 b=1 for ( b=1 ; b= 14-2*a ; b++) b= 14-2*1(12)成立,b++ 输出 再执行b=2 b= 14-2*2(10)成立 b++ 输出 ; 一直到执行完b=8 不成立后跳出循环。接着执行外循环a=2,然后是内循环for ( b=1 ; b= 14-2*a ; b++) b=1 b= 14-2*1(12)成立,b++ 输出 再执行b=2 b= 14-2*2(10)成立 b++ 输出 ; 一直到执行完b=8 不成立后跳出循环。一次类推到a=6之后外循环也结束。
Set-Cookie后,Cookie丢失问题解决(跨域)
iframe跨域访问,服务端设置免登cookie( response.addHeader("Set-Cookie",".....") )后,有的访问能携带免登cookie;有的免登cookie丢失,登录失败。
对某些UA( request.getHeader("user-agent") ),不设置 SameSite
2021-07-21 前端跨域携带cookie问题
Access-Control-Allow-Origin为*的时候,前端设置withCredentials:true,将不能发送cookie到服务端。
此外,前端要发送cookie到服务端,还要 XMLHttpRequest 的 withCredentials 标志设置为 true,且
服务器端的响应中未携带 Access-Control-Allow-Credentials: true。
XMLHttpRequest 的 withCredentials 标志设置为 true,是为了客户端向服务端发送cookie,
响应中Access-Control-Allow-Credentials: true,是为了客户端能够接收cookie,无此标记,浏览器将不会把响应内容返回给请求的发送者。
因此,前端要携带cookie到服务端,需要三个条件:
新标准中提供了文档之间直接的消息传输API。而且不限制跨域消息传递!
发送消息使用的是Window对象的postMessage(data,targetURL)方法就可以了,但给哪个window对象发送消息,就使用哪个window的实例来调用,注意这个细节。
文档默认监听一下message事件就可以接受消息了:window.addEventListener("message", function (ev) {});
监听消息事件:ev两个重要属性:ev.source指向发送消息的源window对象,ev.data来获取收到的消息数据
多线程技术在服务端技术中已经发展的很成熟了,而在Web端的应用中却一直是鸡肋
在新的标准中,提供的新的WebWork API,让前端的异步工作变得异常简单。
使用:创建一个Worker对象,指向一个js文件,然后通过Worker对象往js文件发送消息,js文件内部的处理逻辑,处理完毕后,再发送消息回到当前页面,纯异步方式,不影响当前主页面渲染。