【问题标题】:Set a cookie on another domain using ajax and php - FAILS使用 ajax 和 php 在另一个域上设置 cookie - 失败
【发布时间】:2021-03-28 16:43:15
【问题描述】:

Domain-Being-Browsed.com 有一个 javascript 函数,当触发该函数时,会对另一个域上的 php 文件进行 ajax 调用:another-domain.com/set-cookie.php

set-cookie.php 包含如下代码:

header("Access-Control-Allow-Origin: http://localhost:3000");
header("Access-Control-Allow-Credentials: true");
$cookie_set = FALSE;
$cookie_set = setcookie( 'cookie_name', 'cookie_value', $a_big_number, '/' );
if( $cookie_set ){  echo 'cookie set!';  }

javascript函数是这样的:

var url = 'http://another-domain.com/set-cookie.php';
$.ajax({
  'url': url,
  'xhrFields': {
    withCredentials: true
  }
}).done(function(resp){
console.log(resp);
});

如果我在浏览器中访问 http://another-domain.com/set-cookie.php,它会设置 cookie。 如果我触发了 javascript 函数,我会在控制台中得到响应“cookie set!”,但是当我在浏览器中加载 http://another-domain.com 时,我发现 cookie 不存在。

我发现了这篇文章:Can't set cookie on different domain,这看起来和我的一模一样,但是我已经合并了给出的答案,但它没有帮助。我错过了什么?

【问题讨论】:

  • 你在开发者工具中看到 cookie 了吗?
  • 使用javascript函数时,没有。如果我在浏览器中访问 php 页面,那么是的,cookie 已创建,并且在开发者工具中可见。
  • 控制台有错误吗?
  • 完全没有错误 - 只是来自 php 文件的消息表明 cookie 设置成功。
  • 感谢 Barmar - 这导致了解决方案,我将在此处发布。

标签: php ajax cookies cross-domain


【解决方案1】:

按照 Barmar 的指示,我在开发工具中的“网络”选项卡中检查了响应中的 Set-Cookie 标头。看来我需要将“SameSite”设置为“无”。如果将“Samesite”设置为无,则还必须设置“安全”。如果设置安全,则必须通过 https 加载页面。所以答案,在这里的答案中找到:How to fix "set SameSite cookie to none" warning? 就是把php文件改成这样:

header("Access-Control-Allow-Origin: http://localhost:3000");
header("Access-Control-Allow-Credentials: true");
$cookie_options = array(
    'expires' => time() + 60*60*24*30,
    'path' => '/',
    'secure' => true,
    'samesite' => 'None'
);
$cookie_set = FALSE;
$cookie_set = setcookie( 'cookie_name', 'cookie_value', $cookie_options );
if( $cookie_set ){  echo 'cookie set!';  }

并通过 https 加载页面。有效!

【讨论】:

    猜你喜欢
    • 2011-02-09
    • 2016-12-25
    • 2013-11-01
    • 1970-01-01
    • 2017-03-30
    • 2016-03-06
    • 2011-10-09
    相关资源
    最近更新 更多