Cookies 跨域cookie
我在两个不同的域中有两个webapp WebApp1和WebApp2Cookies 跨域cookie,cookies,web-applications,cross-domain,Cookies,Web Applications,Cross Domain,我在两个不同的域中有两个webapp WebApp1和WebApp2 我正在HttpResponse的WebApp1中设置cookie 如何在WebApp2中从HttpRequest读取相同的cookie 我知道这听起来很奇怪,因为cookies是特定于给定域的,我们不能从不同的域访问它们;不过,我听说过跨域cookies,它可以在多个webapps之间共享。如何使用跨域cookie实现此要求 注意:我正在用J2EE Web应用程序尝试这一点,因为没有跨域cookie。您可以在foo.examp
注意:我正在用J2EE Web应用程序尝试这一点,因为没有跨域cookie。您可以在
foo.example.com
和bar.example.com
之间共享cookie,但不能在example.com
和example2.com
之间共享cookie,这是出于安全原因。您不能跨域共享cookie。但是,您可以允许所有子域都具有访问权限。要允许example.com
的所有子域都具有访问权限,请将域设置为.example.com
但是,给
otherexample.com
访问example.com
的cookies是不可能的。正如其他人所说,您不能共享cookies,但您可以这样做:
但我认为没有其他办法…有一个关于
还有浏览器指纹识别,它与cookie不同,但有着类似的用途,它可以帮助您以相当程度的确定性识别用户。有一篇文章提到了一种指纹识别方法据我所知,cookies受到“同源”政策的限制。但是,使用CORS,您可以接收并使用“服务器B”cookie从“服务器B”上的“服务器a”建立持久会话 不过,这需要“服务器B”上的一些标题: 您需要在所有“服务器A”请求上发送标志“withCredentials”(例如:
xhr.withCredentials=true;
)
您可以在此处阅读:
可以使用不可见的iFrame来获取cookies。假设有两个域,a.com和b.com。对于域a.com的index.html,可以添加(注意高度=0宽度=0):
这样,您的网站将获得b.com cookies,前提是设置了cookies
下一步是通过JavaScript在iframe中操作站点。如果不拥有第二个域,iframe中的操作可能会成为一个挑战。但是,如果能够访问两个域,则在iframe的src处引用正确的网页应该会提供您想要获得的cookie。您可以尝试使用图像标记将cookie val推送到另一个域 尝试执行此操作时,您的里程数可能会有所不同,因为某些浏览器要求您在WebApp2域上具有正确的路径,否则浏览器将拒绝cookie 如果您查看plus.google.com p3p策略,您将看到他们的策略是: CP=“这不是P3P策略!有关更多信息,请参阅。” 这是他们对这些跨域请求的+1按钮使用的策略
另一个警告是,如果您使用的是https,请确保图像标记指向https地址,否则将不会设置cookie。是的,完全可以通过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, *");
在PHP文件中,您可以使用$\u COOKIE[name]
第二,在客户端:
在ajax请求中,需要包含2个参数
crossDomain: true
xhrFields: { withCredentials: true }
例如:
type: "get",
url: link,
crossDomain: true,
dataType: 'json',
xhrFields: {
withCredentials: true
}
做谷歌正在做的事情。创建一个PHP文件,在所有3个域上设置cookie。然后在要设置主题的域上,创建一个HTML文件,该文件将加载在其他两个域上设置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>
请稍等
然后在body标记上添加onload回调。仅当图像完全加载时,即在其他2个域上设置cookie时,才会加载文档。Onload回调:
<head>
<script>
function loadComplete(){
window.location="http://domain1.com";//URL of domain1
}
</script>
</head>
<body onload="loadComplete()">
setcookie.php
函数loadComplete(){
window.location=”http://domain1.com“;//域1的URL
}
setcookie.php
我们使用如下PHP文件在其他域上设置cookie:
<?php
if(isset($_GET['theme'])){
setcookie("theme", $_GET['theme'], time()+3600);
}
?>
现在在三个域上设置Cookie。在
webapi
var cookie = actionContext.Request.Headers.GetCookies("newhbsslv1");
Logger.Log("Cookie " + cookie, LoggerLevel.Info);
Logger.Log("Cookie count " + cookie.Count, LoggerLevel.Info);
if (cookie != null && cookie.Count > 0)
{
Logger.Log("Befor For " , LoggerLevel.Info);
foreach (var perCookie in cookie[0].Cookies)
{
Logger.Log("perCookie " + perCookie, LoggerLevel.Info);
if (perCookie.Name == "newhbsslv1")
{
strToken = perCookie.Value;
}
}
}
函数GetOrder(状态,过滤器){
var isValid=true;//isValidGuid(customerId);
如果(有效){
var-htmlstr='';
//varsURL=ApiPath+'/api/Orders/Customer/'+customerId+'?status='+status+'&filter='+filter;
varsURL=ApiPath+'/api/Orders/Customer?status='+status+'&filter='+filter;
$.ajax({
键入:“获取”,
//url:ApiPath+'/api/Orders/Customer/'+customerId+'?状态='+status+'&filter='+filter,
url:ApiPath+'/api/Orders/Customer?status='+status+'&filter='+filter,
数据类型:“json”,
跨域:是的,
xhrFields:{
证书:正确
},
成功:功能(数据){
var htmlStr='';
if(data==null | | data.Count==0){
htmlStr=‘不,不,不,不,’;
<?php
if(isset($_GET['theme'])){
setcookie("theme", $_GET['theme'], time()+3600);
}
?>
var cookie = actionContext.Request.Headers.GetCookies("newhbsslv1");
Logger.Log("Cookie " + cookie, LoggerLevel.Info);
Logger.Log("Cookie count " + cookie.Count, LoggerLevel.Info);
if (cookie != null && cookie.Count > 0)
{
Logger.Log("Befor For " , LoggerLevel.Info);
foreach (var perCookie in cookie[0].Cookies)
{
Logger.Log("perCookie " + perCookie, LoggerLevel.Info);
if (perCookie.Name == "newhbsslv1")
{
strToken = perCookie.Value;
}
}
}
function GetOrder(status, filter) {
var isValid = true; //isValidGuid(customerId);
if (isValid) {
var refundhtmlstr = '';
//varsURL = ApiPath + '/api/Orders/Customer/' + customerId + '?status=' + status + '&filter=' + filter;
varsURL = ApiPath + '/api/Orders/Customer?status=' + status + '&filter=' + filter;
$.ajax({
type: "GET",
//url: ApiPath + '/api/Orders/Customer/' + customerId + '?status=' + status + '&filter=' + filter,
url: ApiPath + '/api/Orders/Customer?status=' + status + '&filter=' + filter,
dataType: "json",
crossDomain: true,
xhrFields: {
withCredentials: true
},
success: function (data) {
var htmlStr = '';
if (data == null || data.Count === 0) {
htmlStr = '<div class="card"><div class="card-header">Bu kriterlere uygun sipariş bulunamadı.</div></div>';
}
else {
$('#ReturnPolicyBtnUrl').attr('href', data.ReturnPolicyBtnUrl);
var groupedData = data.OrderDto.sort(function (x, y) {
return new Date(y.OrderDate) - new Date(x.OrderDate);
});
groupedData = _.groupBy(data.OrderDto, function (d) { return toMonthStr(d.OrderDate) });
localStorage['orderData'] = JSON.stringify(data.OrderDto);
$.each(groupedData, function (key, val) {
var sortedData = groupedData[key].sort(function (x, y) {
return new Date(y.OrderDate) - new Date(x.OrderDate);
});
htmlStr += '<div class="card-header">' + key + '</div>';
$.each(sortedData, function (keyitem, valitem) {
//Date Convertions
if (valitem.StatusDesc != null) {
valitem.StatusDesc = valitem.StatusDesc;
}
var date = valitem.OrderDate;
date = date.substring(0, 10).split('-');
date = date[2] + '.' + date[1] + '.' + date[0];
htmlStr += '<div class="col-lg-12 col-md-12 col-xs-12 col-sm-12 card-item clearfix ">' +
//'<div class="card-item-head"><span class="order-head">Sipariş No: <a href="ViewOrderDetails.html?CustomerId=' + customerId + '&OrderNo=' + valitem.OrderNumber + '" >' + valitem.OrderNumber + '</a></span><span class="order-date">' + date + '</span></div>' +
'<div class="card-item-head"><span class="order-head">Sipariş No: <a href="ViewOrderDetails.html?OrderNo=' + valitem.OrderNumber + '" >' + valitem.OrderNumber + '</a></span><span class="order-date">' + date + '</span></div>' +
'<div class="card-item-head-desc">' + valitem.StatusDesc + '</div>' +
'<div class="card-item-body">' +
'<div class="slider responsive">';
var i = 0;
$.each(valitem.ItemList, function (keylineitem, vallineitem) {
var imageUrl = vallineitem.ProductImageUrl.replace('{size}', 200);
htmlStr += '<div><img src="' + imageUrl + '" alt="' + vallineitem.ProductName + '"><span class="img-desc">' + ProductNameStr(vallineitem.ProductName) + '</span></div>';
i++;
});
htmlStr += '</div>' +
'</div>' +
'</div>';
});
});
$.each(data.OrderDto, function (key, value) {
if (value.IsSAPMigrationflag === true) {
refundhtmlstr = '<div class="notify-reason"><span class="note"><B>Notification : </B> Geçmiş siparişleriniz yükleniyor. Lütfen kısa bir süre sonra tekrar kontrol ediniz. Teşekkürler. </span></div>';
}
});
}
$('#orders').html(htmlStr);
$("#notification").html(refundhtmlstr);
ApplySlide();
},
error: function () {
console.log("System Failure");
}
});
}
}
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="http://burada.com" />
<add name="Access-Control-Allow-Headers" value="Content-Type" />
<add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
<add name="Access-Control-Allow-Credentials" value="true" />
</customHeaders>
</httpProtocol>