php - PHP 中的 AWS Cloudfront SetCookie

标签 php cookies amazon-web-services amazon-cloudfront

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

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

他们给出了一个示例 cookie header :

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。出于安全原因,浏览器会默默地忽略它。这是一个浏览器功能,不是 PHP 的东西。

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

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

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

关于php - PHP 中的 AWS Cloudfront SetCookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29564984/

相关文章:

PHP:foreach 按 id 和月份循环并添加值

php - 使用正则表达式以任意顺序匹配多个单词

php - TinyMCE - 剥离标签然后添加标签 - 奇怪的行为

ruby-on-rails - Rails3/Sessions/Active_Record_Store/Signout --> 如何删除Sessions表中的cookie和记录?

c# - 为什么我不能删除这个 cookie?

amazon-web-services - 使用 Code Pipeline 编排云形成

php - 通过 PHP 无需主机名即可访问 MySQL 数据库

java - 正确的 cookie 管理

amazon-web-services - AWS - 教育账户无法创建集群,EC2 权限不足

mysql - 有没有办法在 AWS MySql/Aurora 上运行引用 sql 远程文件的远程 shell 脚本