查看根据ajax XHR请求设置的Chrome devtools中的Cookie

时间:2017-05-02 21:23:30

标签: ajax cookies google-chrome-devtools

我在localhost:4000上有一个页面,它有一个由服务器设置的cookie。  该页面还包含一个脚本,该脚本在页面加载时成功地将XHR请求返回给服务器。此XHR请求响应设置第二个cookie。我只能在应用程序(标签)>下的Chrome devtools中看到非XHR cookie。存储(左侧菜单组)>饼干> http://localhost:4000

我可以在“网络”选项卡中看到从服务器返回的XHR cookie(如果第二次加载页面,则会显示XHR请求中正确包含非XHR和XHR cookie:

Request Cookies
xhr_cookie  valueABC
from_homepage   value123
Response Cookies
xhr_cookie  valueABC

所以XHR cookie在某个地方被持久存在,但我无法在Chrome的devtools中看到它。

3 个答案:

答案 0 :(得分:0)

不是Chrome的答案,但解决方法是使用Firefox并从Web开发人员窗格上的齿轮启用Storage“检查器”。 https://developer.mozilla.org/en-US/docs/Tools/Storage_Inspector

答案 1 :(得分: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), "/");
?>
  • 跨源Cookie正在运行:console log 您需要允许设置第三方Cookie 浏览器设置
  • 我找不到存储第三方Cookie的位置。
  • Chrome不会显示Cookie,也不会影响真实的网站。
  • Firefox&amp;边缘保存第三方网站存储中的cookie,因此它将影响真正的第三方网站。

可在Here

上找到更多信息
  

根据XMLHttpRequest Level 1和XMLHttpRequest Level 2,   这个特殊的响应标题属于“禁止”响应   您可以使用getResponseHeader()获取的标头,所以唯一   这可能起作用的原因基本上是一个“顽皮”的浏览器

答案 2 :(得分:0)

在Chrome中,禁用“站点隔离”:

  1. 转到“ chrome:// flags /#site-isolation-trial-opt-out
  2. react-native设置为Disable site isolation
  3. 重新启动

有关更多详细信息,请参见:https://blog.ermer.de/2018/06/11/chrome-67-provisional-headers-are-shown