PHP 中的 AWS Cloudfront SetCookie

2023-12-19

我正在尝试设置 cookie 以查看来自 AWS Cloudfront 的私有内容

http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-setting-signed-cookie-custom-policy.html

他们给出了一个 cookie 标头示例:

Set-Cookie: Domain=d111111abcdef8.cloudfront.net; Path=/; Secure; HttpOnly; CloudFront-Key-Pair-Id=APKA9ONS7QCOWEXAMPLE

我创建了以下 php 代码

setcookie (
  'CloudFront-Key-Pair Id',
  'MYID',
  0,
  '/',
  'mycloudfrontsub.cloudfront.net',
  true, 
  true
);

但是cookie没有设置。仅当我取出域名时才会设置 cookie。

我认为这是由于在 session_start 之后在脚本中调用 setcookie 造成的。我尝试添加这个,但在 session_start() 之前需要它

session_set_cookie_params(0, '/', 'duvoxso6rm38g.cloudfront.net);

我需要做这样的事情吗?

//close local session, then open new one for aws
$id=SID;
session_write_close();
session_set_cookie_params(0, '/', 'mysub.cloudfront.net');
session_start();
setcookie(...);
session_write_close();
session_set_cookie_params(0, '/', 'originaldomain.com');    
session_start();

这些 cookie 不会显示在浏览器中,因为您从域 B 发送了域 A 的 cookie。出于安全原因,浏览器会默默地忽略该 cookie。这是浏览器功能而不是 PHP 的功能。

如果您想在 CloudFront 中使用签名 cookie,您需要为作为 PHP 服务器域的子域的 CloudFront 分配使用 CNAME。更详细的答案可以在下面找到:https://mnm.at/markus/2015/04/05/serving-private-content-through-cloudfront-using-signed-cookies/ https://mnm.at/markus/2015/04/05/serving-private-content-through-cloudfront-using-signed-cookies/

简而言之:假设您想使用该域example.com。您在下面提供 PHP 文件www.example.com。然后就可以使用CNAME了media.example.com对于 d111111abcdef8.cloudfront.net。要将 cookie 从 PHP 端发送到 CloudFront 服务器,您需要使用域example.com在 Cookie 中。

引用的站点还注意到您应该使用 PHP 函数header()发送cookie,而不是设置cookie()。这是因为 setcookie 函数执行了一些编码,破坏了使用网站上提到的函数创建的歌唱参数。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 中的 AWS Cloudfront SetCookie 的相关文章

随机推荐