您可以拥有一个与第三方共享 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 从其参数中读取秘密 auth 密钥和 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>