繁体   English   中英

使用jsonp跨域获取Cookie值不适用于IE

[英]Getting cookies values cross domain using jsonp not working for IE

我无法使用jsonp将Cookie信息从域A转移到域B。 我已经可以在Chrome和Firefox等系统上使用了,但是对于IE则无法使用。 我正在执行从域B到域A的jsonp请求,该请求通过域A上的php在那设置了一个cookie,然后再次从B重新检查了该cookie。 然后将Cookie中的信息打印到屏幕(域A)上,以便我可以从域B提取该信息,并在其中设置一个反映该信息的Cookie(我知道存在安全风险,因此我不打算同步敏感此处的信息,只是一个设置)。

因此,如上所述,这适用于FF,Chrome等。但是在IE上,我看到只返回了会话cookie,而我设置的cookie不是(也不应该)。

知道这里有什么问题吗? 还是不可能吗? 我也短暂地尝试过CORS,但是有同样的问题。

我有以下测试设置:

域A :(中央域)

login.php

<?php 
//below line solves the problem. See accepted answer
header('P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"');
setcookie("loggedin","5",time()+3600);
echo 1;

check.php

<?php
//below line solves the problem. See accepted answer
header('P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"');
$cookies = implode('; ', array_map(function ($v, $k) { return $k . '=' . $v; }, $_COOKIE, array_keys($_COOKIE)));

if(isset($_COOKIE['loggedin'])&&($_COOKIE['loggedin'] == "5")) {
        echo "alert('logged in, ".$cookies."');";
} else {
        echo "alert('not logged in, ".$cookies."');";
}

域B:

jsonp.html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
</head>
<body>
<h1>hi!</h1>
<script>
        jQuery.ajax({
                url: 'http://cookies.hidev.nl/login.php',
                dataType: 'jsonp',
                type: "get",
        });
        //note: first call will set the cookie, next succeeds only after reload due to async loading. This is only for test purposes
        jQuery.ajax({
                url: 'http://cookies.hidev.nl/check.php',
                dataType: 'jsonp',
                type: "get"
        });

</script>
</body>
</html>

最后,所有这些都归结为在脚本中添加了p3p策略标头。 为此,我使用了Facebook使用的p3p hack:

header('P3P: CP="Facebook does not have a P3P policy. Learn why here: http://fb.me/p3p"'); 

需要注意的重要一点是,我认为P3P使您可以访问另一个域上的cookie。 这不是完全正确的。 您只能访问也使用P3P标头设置的cookie。 我的实时设置稍微复杂一点,在某些情况下,Cookie是在没有P3P的域A上设置的,而不是通过辅助域设置的(例如本例中的B)。 在这种情况下,我无法从域B中读取Cookie。

我更改了上面的示例以反映解决方案。 当然,请将文本更改为适当的内容,并确保不要意外使用与紧凑代码等效的词(例如,Law,NON等)。

就我而言,我可以这样做,因为我们仅存储客户端信息,而我们甚至不知道它本身是什么。 我们不存储任何数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM