[英]Share cookies with other domains
我知道只要它們是同一父域的子域 ,就可以允許其他域讀取我們的域cookie。
例如, intranet.abc.com
和extranet.abc.com
可以通過為.abc.com
指定域屬性來允許彼此讀取.abc.com
現在,我真的需要我可以允許其他域讀取我的域cookie(它們不是同一域的子域 )。 我在互聯網上搜索了很多討論=> 由於安全問題,所有人都說“不” 。 我不確定我是否錯過了那里的解決方案,因為在這種情況下我沒有看到任何安全問題。 我的服務器明確允許這個cookie由XYZ.COM域讀取,因為cookie不包含任何敏感信息,而XYZ.COM域是我的可信域,
在我看來, 應該有一種方法來指定允許在我們的域中讀取特定cookie的其他域的列表 ,就像CORS一樣,服務器可以決定信息是否應該可用於某些可信域。
如果沒有使用解決方法,請告訴我是否可行,如果是,該怎么做? 如果不可能,我真的想知道原因。
有關我正在實施的內容的一些信息:
我正在實現文件下載,在客戶端我需要通過使用javascript中的間隔定期檢查cookie中的下載令牌來檢測下載是否完成。
我目前正在處理的當前系統的邏輯可能將文件存儲在2個不同的服務器中。 如果當前服務器中缺少該文件,它將在另一個服務器(另一個域)中下載文件
非常感謝你。
您可以通過打開iframe到其他域上的特殊檢測頁面並使用window.postMessage API在窗口之間進行通信來讀取域外cookie。 顯然只有HTML5。
為簡潔起見,簡化postMessage API,請參閱MDN開發人員頁面以獲取完整詳細信息。 https://developer.mozilla.org/en-US/docs/Web/API/Window.postMessage
<iframe id="ifrm" src="http://other.domain.com/getCookie.html"></iframe>
<script>
var iframe = document.getElementById('ifrm');
window.addEventListener('message', function (e) {
if (e.source === iframe.contentWindow && e.origin === 'other.domain.com') {
var cookie = e.data;
//do something with cookie
}
});
//wait for the iframe to load...maybe ping it first...then
iframe.contentWindow.postMessage('give me the cookie:cookie name', 'other.domain.com');
</script>
/* in getCookie.html */
<script>
window.addEventListener('message', function (e) {
if (e.origin === 'your.domain.com') {
var soughtCookie = /give me the cookie\:(.*)/.exec(e.data)[1];
// read the cookie
var cookie = getCookieFn(soughtCookie)
e.source.postMessage(cookie.toString(), 'your.domain.com');
}
}, false);
</script>
您可以擁有一個與第三方共享cookie內容的后端Web服務,但是您的服務器必須在會話中保存cookie值並且具有與其他網站共享的會話ID。
還可以使用特殊頁面和重定向,以便讀取cookie值並將其作為表單提交傳遞到您的域。
讓我們說您的域名是yours.com,並在頁面yours.com/page1上設置一些cookie值。
現在是xyz.com,另一個域名想要這個價值。 xyz.com/somePage,重定向到yours.com/spl(以及發送用戶說xyz.com/somePage2的頁面參數),現在yours.com/spl通過JavaScript獲取cookie,然后重定向到xyz.com / somePage2將cookie值作為POST或GET參數傳遞。
http://sel2in.com/pages/prog/html/acrossSites/make.php上的完整工作示例(使用簡單的Web服務)
AJAX不是例子,但是可以用iframe來做。
代碼:
coki.js(進入第一個想要公開cookie的網站)
function setCookie(cname,cvalue, daysExpire)
{
var d = new Date();
d.setTime(d.getTime()+(daysExpire * 24 * 60 * 60 * 1000));
var expires = "expires=" + d.toGMTString();
document.cookie = cname + "=" + cvalue + "; " + expires + " ; path=/ ;"
}
function getCookie(cname)
{
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++)
{
var c = ca[i].trim();
if (c.indexOf(name)==0) return c.substring(name.length,c.length);
}
return "";
}
wsa.php(進入網站1)。 為了使其更安全,可以檢查調用頁面/容器URL並使用動態密鑰。
<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
error_reporting(E_WARNING);
$d = $_REQUEST['s'];
if($d != "secret565"){
echo "Bad secret bye";
return;
}
$n = $_REQUEST['n'];
if($n == ""){
echo "No cookie name, bye";
return;
}
?>
<script src=coki.js>
</script>
<script >
n = '<?php echo "$n"?>'
v = getCookie(n)
//alert("For " + n + ", got :" + v + ".")
window.parent.gotVal(n, v)
</script>
getc.html
在站點2上,使用iframe通過wsa.php從站點1獲取cookie C1或其他cookie的值。 wsa.php從其參數中讀取秘密身份驗證密鑰和cookie名稱,然后在包含頁面中調用javascript函數以傳回值
<form name=f1 action=ws.php method=post>
<h1>Get cookie from Javascript sample </h1>
http://sel2in.com/pages/prog/html/acrossSites/
<table>
<tr><td>Url from <td/><td> <input name=u1 value='wsa.php' size=100><td/></tr>
<tr><td>Cookie Name <td/><td> <input name=n value='C1'><td/></tr>
<tr><td>Secret <td/><td> <input name=s value='secret565'><td/></tr>
<tr><td><input type=button value='Go' onclick='s1do()' > <td/><td><td/></tr>
</table>
</form>
<div id = result>result here</div>
<div id = cc1>container</div>
v 2 c
<script>
function gotVal(n, v){
document.getElementById("result").innerHTML = "For " + n + ", got :" + v + "."
}
function s1do(){
document.getElementById("cc1").innerHTML = ""
n1 = document.f1.n.value
s1 = document.f1.s.value
url = document.f1.u1.value
qry = "s=" + escape(s1) + "&n=" + escape(n1)
s = "<iframe border=0 height =1 width=1 src=\"" + url + "?" + qry + "\" ></iframe>"
document.getElementById("cc1").innerHTML = s
}
</script>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.