Javascript 使用CORS访问HTTP Cookie

Javascript 使用CORS访问HTTP Cookie,javascript,php,http,cookies,cors,Javascript,Php,Http,Cookies,Cors,我有一个用户在域a上。当他们向域a发出请求时,我希望域a联系域B。一旦请求到达域B,我希望域B访问用户在域B上而不是在域a上的HTTP Cookies。这是否可能与CORS有关 因此,我们需要重新讨论 用户访问www.example.com 跨域请求来自www.example.com->www.example.net www.example.net为请求用户检查www.example.net上的HTTP cookie,而不是www.example.com 显然,开箱即用的方法是行不通的。我正在寻

我有一个用户在域a上。当他们向域a发出请求时,我希望域a联系域B。一旦请求到达域B,我希望域B访问用户在域B上而不是在域a上的HTTP Cookies。这是否可能与CORS有关

因此,我们需要重新讨论

  • 用户访问
    www.example.com
  • 跨域请求来自
    www.example.com
    ->
    www.example.net
  • www.example.net
    为请求用户检查
    www.example.net
    上的HTTP cookie,而不是
    www.example.com
  • 显然,开箱即用的方法是行不通的。我正在寻找一个安全的解决方案,确实工作

    这里的想法是我同时拥有
    www.example.com
    www.example.net
    ,当用户访问
    www.example.com
    时,如果他们在
    www.example.net
    上设置了特定的HTTP Cookie,我想登录到
    www.example.net
    数据库

    更新

    我已经在测试服务器端脚本上设置了CORS(
    www.example.net
    用于此示例):


    没有任何CORS错误。如果我直接在浏览器中访问服务器端脚本,我会看到客户端HTTP cookie的正确转储。但是,当
    www.example.com
    被加载时,它们不会被转储。这意味着我不能在我的服务器上做我需要做的事情,
    www.example.net
    ,因为
    $\u COOKIE
    数组是空的。

    example.com
    中,我们有一个带有iframe的页面,它从
    example.net
    加载页面

    index.html:

    <!DOCTYPE html>
    <html lang="en">
    <body>
    <iframe src="http://example.net/log.php"></iframe>
    </body>
    </html>
    
    一些注意事项:

    在我的开发环境(Win10,Chrome 87)中,Chrome避免跨站点cookie。Chrome 80+在set cookie中添加了一个新属性,名为
    SameSite
    ,用于改善隐私

    在您的情况下,此选项必须是
    None
    像这样
    SameSite=None
    并且您的域必须是
    https

    简而言之,set cookie命令应该有
    。。。保护SameSite=None
    例如:

    header("Set-Cookie: key=value; path=/; domain=example.net; Secure; SameSite=None");
    
    在我的开发环境中,我没有https域,因此我为我的测试禁用chrome SameSite

    如果您设置了跨源请求,那么将包括请求所针对的URL的cookie。但是,这将在设置包括凭据的请求之前触发一个错误

    fetch("//example.net/", {
        method: 'GET',
        credentials: 'include'
    });
    

    您是否尝试使用iframe?在
    example.com
    中,生成一个动态iframe,其中src to
    example.net
    并附加到正文中,然后您可以访问
    example.net
    cookies@Lessmore我需要更多信息才能测试此功能。若要尝试阅读访问控制允许源代码:*我们在服务器nginx上进行了此配置(或apache)您是否尝试了我的解决方案(iframe)?我认为这也可以,但当我在服务器上转储cookie时,它不会显示任何cookie。如果我直接访问服务器端脚本,cookie就在那里。没有CORS错误。
    <?php
    $visits = isset($_COOKIE['visits']) ? intval($_COOKIE['visits']) : 0;
    var_dump($_COOKIE);
    $visits += 1;
    setcookie('visits', $visits, time() + 3600);
    
    header("Set-Cookie: key=value; path=/; domain=example.net; Secure; SameSite=None");
    
    fetch("//example.net/", {
        method: 'GET',
        credentials: 'include'
    });