Я пытаюсь установить cookie для просмотра личного контента из AWS Cloudfront.
Они дают пример заголовка 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 устанавливается только в том случае, если я удалю доменное имя.
Я думаю, что это связано с вызовом setcookie в сценарии после session_start. Я попытался добавить это, но это требуется перед 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 не отображаются в браузере, так как вы отправляете файлы cookie для домена A из домена B. Это игнорируется браузерами в целях безопасности. Это функция браузера, а не PHP.
Если вы хотите использовать подписанные куки с CloudFront, вам нужно использовать CNAME для дистрибутива CloudFront, который является поддоменом вашего домена сервера PHP. Более подробный ответ можно найти в разделе: 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. Чтобы отправить куки со стороны PHP на CloudFront Server, вам нужно использовать домен example.com в печенье.
Ссылочный сайт также замечает, что вы должны использовать функцию PHP Заголовок () чтобы отправить печенье, а не SetCookie (). Это связано с тем, что функция setcookie выполняет некоторую кодировку, которая разрушает певческий параметр, созданный с помощью функций, упомянутых на сайте.
Других решений пока нет …