http://www.b.com/b_setcookie.php(设置cookie)
http://www.a.com/a_getcookie.php(查看生成的cookie)说明,调用b_setcookie.php时是通过域名www.b.com来访问了,而setcookie函数中生成的cookie的域名是.a.com,如果没有下面的p3p的header,则生成cookie会失败的。b_setcookie.php<script src="http://www.a.com/research/p3p/a_setcookie.php?id=www.b.com"></script>a_setcookie.php<?phpheader('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
setcookie("test", $_GET['id'], time()+3600, "/", ".a.com"); 
?>a_getcookie.php<?php
var_dump($_COOKIE);
?>通过javascript调用a.com中的文件来生成cookie的方式没有问题,
但是我采用socket的方式去访问a_setcooke.php把参数也闯过去了,为什么就不能成功呢?
也就是在b_setcookie.php
<?php
$fp = fsockopen();
$out = 'GET $path HTTP/1.0\r\n';
.........
fwrite($fp,$out);
........
?>
里面内容省略,socket访问没有问题,就是不会生成cookie,同样去访问b_setcookie.php,这里面有什么不同吗?
?>
?>

解决方案 »

  1.   

    用程序模拟访问页面,cookie是不可能写在当前浏览器中的。因为程序虚拟了一个浏览器行为,那么cookie就写在这个虚拟的浏览器中,和当前使用的浏览器没有关系。
      

  2.   

    4L正解,跟上次碰到的curl的问题一样。
      

  3.   


    //以下是我实际项目的,参考下吧。
    header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
    setcookie('sid', $sid, 2000000000, '/', $_SERVER['HTTP_HOST']);