簡體   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