如何从一个域重定向到另一个域并为另一个域设置 Cookie 或标头?
HTTP 重定向不允许为目标设置自定义标头或 Cookie领域。此外,浏览器会阻止为与使用 Set-Cookie 标头响应的域不同的域设置 Cookie。
解决方案 1:使用查询参数重定向,然后设置 Cookie
- 重定向自域 A 到域 B,并将访问令牌作为查询参数传递。
- 域 B 接收请求并使用令牌设置自己的 cookie。
解决方案 2:跨源与 Window.postMessage() 通信
- 向域 A 添加一个指向域 B 的隐藏 iframe。
- 使用 Window.postMessage() 将访问令牌发送到域 B。
- 域 B 将令牌存储在 localStorage 中或使用 JS 设置 cookie。
- 向域 A 发送令牌已存储的消息,并将用户重定向到域 B。
解决方案 3:服务器端令牌交换
- 使用 域 A 中的标记指向域 B,并使用访问令牌作为查询参数。
- 域 B 在收到请求后使用 Set-Cookie 标头进行响应。
- 使用 fetch 或 XMLHttpRequest(带有凭据)并启用 CORS)将令牌直接发送到域 B。
- 域 B 在收到访问令牌后设置 cookie。
重要提示:
- 必须在浏览器设置中启用所有 cookie,解决方案 2 和 3 才能正常工作。
- 使用 SameSite=None;解决方案 3 的 cookie 中的安全标志。
- 解决方案 1 中的查询字符串会公开访问令牌并带来安全风险。
- 解决方案 3 需要在目标域上启用 CORS,并在目标域上启用明确的来源规范服务器端。
以上是如何在重定向期间为不同的域设置 Cookie 或标头?的详细内容。更多信息请关注PHP中文网其他相关文章!