Изменение файлов cookie - PullRequest
       11

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

5 голосов
/ 07 февраля 2011

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

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

Ответы [ 5 ]

4 голосов
/ 25 сентября 2015

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

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

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

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

MYCOOKIE:123 

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

Поскольку это ваш сервер, вы сможете изменить свой код, который создает новые куки. Если по какой-то причине вы почувствовали, что вам нужно сделать это вне вашего кода, вы можете сделать это с помощью чего-то вроде следующего, но вам нужно будет точно посмотреть, как ваш 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>

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

3 голосов
/ 19 июня 2017
ProxyPassReverseCookieDomain company.com app.company.com

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

ref: https://httpd.apache.org/docs/2.4/en/mod/mod_proxy.html#ProxyPassReverseCookieDomain

0 голосов
/ 19 января 2018

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

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

0 голосов
/ 11 февраля 2011

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

0 голосов
/ 10 февраля 2011

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

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

...