Изменение доменов файлов cookie

Я использую apache в качестве прокси-сервера для своего веб-сервера приложений и хотел бы на лету изменить доменное имя, связанное с файлом cookie sessionid.

С файлом cookie связан домен .company.com, и я хотел бы с помощью перезаписи мода apache (или какого-либо подобного модуля) прозрачно изменить домен на app.company.com. Это возможно ? и если да, то как бы это сделать?


person abu.marcose    schedule 07.02.2011    source источник
comment
Менять в какой именно момент? Для сервера или для клиента? Я не понимаю.   -  person Pekka    schedule 07.02.2011
comment
Измените его на сервере. По сути, поскольку apache настроен как прокси-сервер, весь трафик между клиентом и сервером приложений направляется через сервер apache. И я пытаюсь изменить домен cookie, установленный приложением, в прокси-сервере apache до того, как cookie достигнет клиента.   -  person abu.marcose    schedule 07.02.2011
comment
@пользователь, я вижу. Я думаю, что это то, на что способны большие толстые обратные прокси - понятия не имею, способен ли на это Apache. Я все еще не уверен, что понимаю, зачем вам это нужно. Разве исходящий запрос не установит cookie для прокси-домена в первую очередь?   -  person Pekka    schedule 07.02.2011
comment
app.company.example является недопустимым значением domain. Это либо должно быть .app.company.example, либо просто опустить его, чтобы использовался текущий домен.   -  person Gumbo    schedule 10.02.2011


Ответы (5)


Вы можете изменить домен файла cookie только на клиенте или когда он устанавливается на сервере. После установки файла cookie информация о пути и домене для него существует только на клиенте. Таким образом, существующие файлы cookie не могут изменить свой домен на сервере, потому что эта информация не отправляется от клиента к серверу.

Например, если у вас есть файл cookie, который выглядит следующим образом на вашем локальном компьютере:

MYCOOKIE:123, domain:www.test.com, path:/

Ваш сервер будет получать только:

MYCOOKIE:123 

на сервере. Почему не отправляется путь и домен? Поскольку браузер хранит эту информацию на клиенте и не беспокоится о ее отправке, поскольку он отправляет этот файл cookie на ваш сервер, только если страница находится по адресу www.test.com< /em> и по пути /.

Поскольку это ваш сервер, вы должны иметь возможность изменить свой код, который создает новые файлы cookie. Если вы чувствуете, что по какой-то причине вам нужно сделать это за пределами вашего кода, вы можете сделать это с помощью чего-то вроде следующего, но вам нужно будет точно посмотреть, как ваш файл cookie записывается в заголовке, чтобы точно соответствовать ему. Ниже приведено непроверенное предположение о работоспособном решении для этого с использованием Apache mod_headers:

<IfModule mod_headers.c>
  Header edit Set-Cookie (.*)(domain=.company.com;)(.*) $1 domain=app.company.com; $2
</IfModule>

Вы также можете использовать mod_headers для изменения файла cookie, полученного от клиента, например, если это необходимо:

<IfModule mod_headers.c>
  RequestHeader edit Cookie "OLD_COOKIE=([0-9a-zA-Z\-]*);" "NEW_COOKIE_NAME=$1;"
</IfModule>

Это только переименует файлы cookie, которые вы получаете в запросе.

person Brad Parks    schedule 25.09.2015
comment
Если это не ‹IfModule mod_headers.c› Редактирование заголовка Set-Cookie (.*)(domain=.company.com;)(.*) $1 domain=app.company.com; $3 ‹/IfModule›, поскольку вы фиксируете 3 шаблона в своем регулярном выражении и заменяете $2 (домен) - person jamespo; 12.10.2016
comment
Хороший вопрос - у меня нет этой настройки нигде для тестирования, так что может быть? Но когда-то у меня это работало, и я скопировал то, что у меня было с того времени. так что, может быть, оба будут работать? - person Brad Parks; 12.10.2016
comment
У меня это вообще не работает в Apache. mod_headers работает, но не может редактировать заголовок Set-Cookie. - person Misko; 13.12.2016
comment
Большая часть вашего ответа является ответом на неправильное понимание исходного вопроса, и один полезный бит о редактировании заголовка Set-Cookie, похоже, не работает. Оригинальный плакат явно ищет что-то вроде ProxyPassReverseCookieDomain. (которого могло не быть в 2011 году) - person dataless; 19.01.2018
comment
@dataless - все, что я знаю, это сработало для меня еще в 2015 году ... Возможно, это не лучший подход, но он сработал. Я посмотрел и понял, что ProxyPassReverseCookieDomain мне подойдет! Я не много работаю с Apache, но собрал все вышеперечисленное вместе, пытаясь понять, как это сделать для нашего собственного варианта использования, и не увидел ProxyPassReverseCookieDomain, что звучит великолепно. - person Brad Parks; 19.01.2018

ProxyPassReverseCookieDomain company.com app.company.com

или обмен доменами (поскольку вы не четко определяете, какой из них является внутренним/внешним).

ссылка: https://httpd.apache.org/docs/2.4/en/mod/mod_proxy.html#ProxyPassReverseCookieDomain

person cuter44    schedule 19.06.2017

Я не знаю ни одного модуля, предоставляющего такую ​​возможность. Поэтому я думаю, вам нужно будет написать свой собственный выходной фильтр, используя mod_ext_filter, который сделает это за вас.

Но если у вас есть контроль над другим сервером, может быть достаточно просто опустить значение domain файла cookie, чтобы клиент автоматически выбрал запрошенный домен в качестве домена файла cookie.

person Gumbo    schedule 10.02.2011
comment
В итоге я просто создал промежуточную страницу, которая через javascript изменила домен cookie на прокси-сервер (путем исключения значения домена), а затем перенаправила пользователя на целевую страницу. Это, казалось, решило проблему. Спасибо за ваши ответы. - person abu.marcose; 11.02.2011

В итоге я просто создал промежуточную страницу, которая через javascript изменила домен cookie на прокси-сервер (путем исключения значения домена), а затем перенаправила пользователя на целевую страницу. Это, казалось, решило проблему. Спасибо за ваши ответы.

person abu.marcose    schedule 11.02.2011

Если ваше веб-приложение захватывает заголовок Host: и использует его для определения части domain= файла cookie, вы также можете рассмотреть директиву Apache ProxyPreserveHost On , которая передает заголовок Host: от клиента.

Это работает только в том случае, если ваше приложение спроектировано так, чтобы предположить, что его доменное имя — это то, что клиент предлагает в заголовке Host. Если ваше приложение является одним из них, это исправит не только ваши файлы cookie, но и любые абсолютные URL-адреса, которые генерирует приложение, что может избавить вас от накладных расходов, связанных с необходимостью включить mod_substitute

person dataless    schedule 19.01.2018