Sun*_*per 217 cookies web-applications cross-domain
我在两个不同的域中有两个webapps WebApp1和WebApp2.
我知道这听起来很奇怪,因为cookie特定于某个域,我们无法从不同的域访问它们; 我听说过CROSS-DOMAIN cookie可以在多个webapps之间共享.如何使用CROSS-DOMAIN cookie实现此要求?
注意:我正在尝试使用J2EE webapps
alc*_*ado 122
正如其他人所说,你不能共享cookie,但你可以这样做:
当然,它不是完全安全的,你必须在你的应用程序之间创建某种内部协议来做到这一点.
最后,如果您在每个请求中执行类似的操作,对用户来说会非常烦人,但如果只是第一个请求则不会.
但我认为没有其他办法......
小智 112
是的,绝对有可能通过domain2.com从domain1.com获取cookie.我对社交网络的社交插件也有同样的问题,经过一天的研究后我找到了解决方案.
首先,在服务器端,您需要具有以下标头:
header("Access-Control-Allow-Origin: http://origin.domain:port");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Methods: GET, POST");
header("Access-Control-Allow-Headers: Content-Type, *");
Run Code Online (Sandbox Code Playgroud)
在PHP文件中,您可以使用 $_COOKIE[name]
第二,在客户端:
在您的ajax请求中,您需要包含2个参数
crossDomain: true
xhrFields: { withCredentials: true }
Run Code Online (Sandbox Code Playgroud)
例:
type: "get",
url: link,
crossDomain: true,
dataType: 'json',
xhrFields: {
withCredentials: true
}
Run Code Online (Sandbox Code Playgroud)
小智 65
据我所知,cookies受到"同源"政策的限制.但是,使用CORS,您可以接收并使用"服务器B"cookie从"服务器B"上的"服务器A"建立持久会话.
虽然,这需要"服务器B"上的一些标题:
Access-Control-Allow-Origin: http://server-a.domain.com
Access-Control-Allow-Credentials: true
Run Code Online (Sandbox Code Playgroud)
你将需要发送的标志" withCredentials "上的所有"服务器A"的要求(例如:xhr.withCredentials = true;
)
你可以在这里读到它:
http://www.html5rocks.com/en/tutorials/cors/
https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS
Mor*_*Nia 44
最聪明的解决方案是在这方面遵循 facebook 的路径。当您访问任何域时,facebook 如何知道您是谁?其实很简单:
Like 按钮实际上允许 Facebook 跟踪外部站点的所有访问者,无论他们是否点击它。Facebook 可以这样做,因为他们使用iframe来显示按钮。iframe 类似于页面中的嵌入式浏览器窗口。使用 iframe 和按钮的简单图像之间的区别在于iframe 包含一个完整的网页 - 来自 Facebook。除了按钮和关于有多少人喜欢当前页面的信息外,此页面上没有太多内容。
因此,当您在 cnn.com 上看到“赞”按钮时,您实际上是在同时访问 Facebook 页面。这允许 Facebook 读取您计算机上的 cookie,该 cookie 在您上次登录 Facebook 时创建。
每个浏览器的基本安全规则是只有创建了 cookie 的网站才能稍后读取它。这就是 iframe 的优势:即使您正在访问不同的网站,它也允许 Facebook 读取您的 Facebook cookie。这就是他们在 cnn.com 上认出您并在那里显示您的朋友的方式。
来源:
Dar*_*rov 25
没有跨域cookie这样的东西.你可以在foo.example.com
和bar.example.com
之间共享一个cookie ,但绝不会在example.com
和之间共享一个cookie example2.com
,这是出于安全原因.
The*_*Pea 20
在以下情况下允许跨站点 cookie :
让我们澄清“域”与“站点”;对“URL 剖析”的快速提醒对我有帮助。在这个 URL 中https://example.com:8888/examples/index.html
,记住这些主要部分(从这篇论文中得到):
https://
example.com
8888
/examples/index.html
。请注意用于 Cookie 目的的“路径”和“站点”之间的区别。“路径”是不是安全相关的; “站点”与安全相关:
小路
服务器可以在 中设置一个Path
属性Set-Cookie
,但它似乎与安全无关:
请注意,这
path
是为了性能,而不是安全性。document.cookie
即使路径不匹配,具有相同来源的网页仍然可以访问cookie 。
地点
根据web.dev 文章,SameSite 属性可以限制或允许跨站点 cookie;但什么是“网站”?
准确理解此处“站点”的含义会很有帮助。该站点是域后缀和它之前的域部分的组合。例如,
www.web.dev
域是web.dev
站点的一部分。
这意味着左边的web.dev
是一个子域;是的,www
是子域(但子域是主机的一部分;请参阅此答案中的奖励回复)
在此 URL 中https://www.example.com:8888/examples/index.html
,请记住以下部分:
https://
example.com
8888
www.example.com
example.com
www
/examples/index.html
有用的链接:
(小心;我正在 Chrome 隐身选项卡中测试我的功能;根据chrome://settings/cookies
我的设置;我的设置是“在隐身模式中阻止第三方 cookie”,所以我无法在隐身模式中测试跨站点 cookie。)
Dan*_*erg 11
您不能跨域共享Cookie.但是,您可以允许所有子域具有访问权限.要允许所有子域example.com
具有访问权限,请将域设置为.example.com
.
但是不可能otherexample.com
访问example.com
cookie.
Hos*_*ian 11
做谷歌正在做的事情.创建一个PHP文件,在所有3个域上设置cookie.然后在主题要设置的域上,创建一个HTML文件,该文件将加载在其他2个域上设置cookie的PHP文件.例:
<html>
<head></head>
<body>
<p>Please wait.....</p>
<img src="http://domain2.com/setcookie.php?theme=whateveryourthemehere" />
<img src="http://domain3.com/setcookie.php?theme=whateveryourthemehere" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
然后在body标签上添加onload回调.只有当图像完全加载时才会加载文档,即在其他2个域上设置cookie时.Onload回调:
<head>
<script>
function loadComplete(){
window.location="http://domain1.com";//URL of domain1
}
</script>
</head>
<body onload="loadComplete()">
setcookie.php
Run Code Online (Sandbox Code Playgroud)
我们使用这样的PHP文件在其他域上设置cookie:
<?php
if(isset($_GET['theme'])){
setcookie("theme", $_GET['theme'], time()+3600);
}
?>
Run Code Online (Sandbox Code Playgroud)
现在cookie设置在三个域上.
您可以尝试使用图像标记将cookie val推送到另一个域.
尝试执行此操作时,您的里程可能会有所不同,因为某些浏览器要求您在WebApp2域上拥有正确的P3P策略,否则浏览器将拒绝该cookie.
如果您查看plus.google.com p3p政策,您会看到他们的政策是:
CP ="这不是P3P政策!有关详细信息,请参阅http://www.google.com/support/accounts/bin/answer.py?hl=zh-CN&answer=151657."
这是他们用于这些跨域请求的+1按钮的策略.
另一个警告是,如果您使用https,请确保图像标记指向https地址,否则cookie将不会设置.
小智 5
在nfriedly.com上有一个很好的概述Facebook如何做到这一点
还有浏览器指纹识别,它与cookie不同,但它的用途相似,它可以帮助您识别具有相当程度的确定性的用户.Stack Overflow上有一篇帖子引用了一种指纹识别方法
归档时间: |
|
查看次数: |
309451 次 |
最近记录: |