IE下的跨域名cookie
本文按署名·非商业用途·保持一致授权作者:
,发表于2006年03月24日00时31分
很久以前写过一篇文章,叫IE下无法利用iframe进行跨域名传递cookie。那时候说要给出解决方法的,结果因为太忙,忘记了。其实这个解决方法和我所用的iframe传递方法原理是一样的,只是把iframe改成了页面跳转。
我简单写一下方法,我用PHP作为示例语言。
域名一:surfchen.wz
Url:http://surfchen.wz/t1.php
代码:
<?php
$cookie_data=array('n1'=>'v1','n2'=>'v2');//cookie测试数据
$hash=md5(serialize($cookie_data));//用来作为保存cookie 数据的文件名
$data=base64_encode(serialize($cookie_data));//要保存的cookie数据
$h=fopen($hash,"wb+");
fwrite($h,$data);
foreach ($cookie_data as $k => $v)
{
setcookie($k,$v);
}
?>
<script type="text/javascript">
<!--
location.href="http://surfchen.pp/r1.php?hash=<?php echo $hash?>"
//-->
</script>域名二:surfchen.pp
Url:http://surfchen.pp/r1.php
代码:
<?php
foreach (unserialize(base64_decode(file_get_contents("http://surfchen.pp/".$_GET['hash']))) as $k => $v)
{
setcookie($k,$v);
}
?>过程是这样的:
http://surfchen.wz/t1.php 这个页面setcookie,并把cookie数据写入一个文件,然后跳转到http://surfchen.pp/r1.php,r1.php的url里带一个参数,根据这个参数获取http://surfchen.wz/t1.php刚才所保存的cookie数据的地址并读取其中的数据,接着setcookie。
这个和MS的passport原理是一样的,也就是在域A注册cookie后,把cookie数据保存到文件或数据库里,然后跳传到域B,并传递一个参数过去,以便根据这个参数获得cookie数据所在位置。最后在域B根据这个参数所获得的cookie数据文件读取数据,并注册cookie到该域下。

2006-03-26 11:05:26
获得hash的办法要改一下,不然没多久就爆掉了
可以就用sessionid作为文件名
2006-03-26 12:55:31
神仙说得对。我只是给出了一个最基本的例子,实际应用中需要更多改进。