首页  > 计算机 >

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到该域下。



2个评论

  1. 神仙:

    获得hash的办法要改一下,不然没多久就爆掉了
    可以就用sessionid作为文件名

  2. SurfChen:

    神仙说得对。我只是给出了一个最基本的例子,实际应用中需要更多改进。

发表评论

  本站文章若无注明,则以署名·非商业用途·保持一致授权
  桂ICP备05004302号 感谢WordPress提供本程序 本模板下载