2017-05-02 53 views
0

我在localhost:4000上有一個頁面,它有一個由服務器設置的cookie。 該頁面還包含一個腳本,可在加載頁面時成功將XHR請求發回服務器。這個XHR請求響應設置了第二個cookie。我只能在應用程序(選項卡)>存儲(左側菜單組)> Cookie>http://localhost:4000下的Chrome開發工具中看到非XHR Cookie。查看從ajax XHR請求中設置的Chrome開發工具中的cookie

我可以看到XHR餅乾從在網絡選項卡的服務器(如果頁被加載的第二時間同時顯示了非XHR和XHR餅乾正確包括在XHR請求返回:

Request Cookies 
xhr_cookie valueABC 
from_homepage value123 
Response Cookies 
xhr_cookie valueABC 

所以XHR的cookie被地方仍然存在,但我不能看到它在Chrome的devtools。

+0

能否請您看一下https://developer.mozilla.org/en-US/docs/Web/API/X MLHttpRequest/withCredentials第二段? –

+0

@MahdiRafatjah感謝您的鏈接。 'withCredentials'只能引用CORS(巧合的是,它在上面的XHR請求顯示中也已經設置爲true)。相反,我想知道哪些地方可以在Chrome開發工具中看到這個XHR cookie值。 – AJP

回答

0

不是針對Chrome的答案,但周圍的工作是在使用Firefox並啓用Storage「檢查員」從齒輪web developer pane。 https://developer.mozilla.org/en-US/docs/Tools/Storage_Inspector

+0

我希望你可以在這裏發佈你的代碼。因爲我正在測試它,但沒有運氣的跨網站。 –

+0

您只需要一臺服務器在返回時設置一個cookie,讓該腳本發送一個xhr,然後讓該服務器在該端點/請求上設置不同的cookie。'withCredentials'僅指CORS。 – AJP

0

相同來源請求罰款。

交叉原點請求有一些限制。

文件:1.PHP:

<?php 
    setcookie("cookie_name_1", "cookie_value_1", time() + (86400 * 30), "/"); 
?> 
<script> 
    var xhr = new XMLHttpRequest(); 
    xhr.open('GET', 'http://foo.ir/2.php', true); 
    xhr.withCredentials = true; 
    xhr.onreadystatechange = function() { 
     if(this.readyState == xhr.DONE) { 
     get_res(); 
     } 
    } 
    xhr.send(null); 

    function get_res(){ 
     var xhr = new XMLHttpRequest(); 
     xhr.open('GET', 'http://foo.ir/2.php?is_set', true); 
     xhr.withCredentials = true; 
     xhr.onload = function() { 
      if (xhr.readyState === xhr.DONE) { 
       if (xhr.status === 200) { 
        console.log(xhr.responseText); 
       } 
      } 
     }; 
     xhr.send(null); 
    } 
</script> 

文件:2.PHP

<?php 
header('Access-Control-Allow-Origin: http://localhost'); 
header('Access-Control-Allow-Credentials: true'); 

if(isset($_GET["is_set"])){ 
    if(isset($_COOKIE["cookie_name_2"])) 
     echo "cookies are set:".$_COOKIE["cookie_name_2"]; 
    else 
     echo "cookies not set"; 
}else 
    setcookie("cookie_name_2", "cookie_value_2", time() + (86400 * 30), "/"); 
?> 
  • 跨域餅乾工作:console log您需要允許第三方Cookie設置在 瀏覽器設置
  • 我找不到第三方cookie被存儲。
  • Chrome瀏覽器不顯示cookies,不會影響真實網站。
  • Firefox &邊緣cookie保存在第三方網站存儲,因此它會影響真正的第三方網站。

更多信息,請Here

中找到根據了XMLHttpRequest Level 1和XMLHttpRequest的2級, 這個特殊的響應頭瀑布下的「禁止」響應 頭,你可以得到使用getResponseHeader (),所以只能 原因,這可能是工作基本上是一個「調皮」的瀏覽器

+0

「我找不到存儲第三方Cookie的位置。」這是我試圖在Chrome中找到答案的問題,但是感謝帖子。我現在將使用Firefox。 SameOrigin在被問到的問題上無法正常工作。 CrossOrigin不是問題的一部分,但也很有趣。爲此,您需要將xhrHeader設置爲'withCredentials true',因爲**'withCredentials'只是CORS **,如果使用jquery,您還需要將crossDomain選項設置爲true。 – AJP

相關問題