簡體   English   中英

PHP Cloudfront SetCookie

[英]AWS Cloudfront SetCookie in PHP

我正在嘗試設置cookie以查看來自AWS Cloudfront的私有內容

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,則需要為CloudFront分配使用CNAME,該分發是您的PHP服務器域的子域。 更詳細的答案可以在以下網址找到: 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函數執行了一些編碼,這些編碼會破壞使用網站上提到的功能創建的歌唱參數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM