apache 更改Cookie域

rlcwz9us  于 2022-12-14  发布在  Apache
关注(0)|答案(6)|浏览(189)

我使用Apache作为我的应用程序Web服务器的代理,并希望在运行中更改与sessionid cookie关联的域名。
这个cookie有一个. company.com域与之关联,我想使用apache mod重写(或一些类似的模块),透明地将域更改为app.company.com。这可能吗?如果可以,如何进行?

bbuxkriu

bbuxkriu1#

您只能在客户端上更改Cookie的域**,或在服务器上设置Cookie时更改域 * a。一旦设置了Cookie,其路径和域信息就只存在于客户端上。因此,现有Cookie不能在服务器上更改其域,因为这些信息不会从客户端发送到服务器。
例如,如果您的本地计算机上有一个类似以下内容的Cookie:

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

您的服务器将仅接收:

MYCOOKIE:123

为什么不发送路径和域?因为浏览器将这些信息保存在客户端,而不发送,因为它只在***页面位于***www.test.com***和路径***/****时才将此cookie发送到您的服务器。
由于是您的服务器,您应该能够更改创建新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。

hgb9j2n6

hgb9j2n62#

ProxyPassReverseCookieDomain company.com app.company.com

或者交换域(因为您没有明确定义哪个是内部域/外部域)。
参考https://httpd.apache.org/docs/2.4/en/mod/mod_proxy.html#ProxyPassReverseCookieDomain

ppcbkaq5

ppcbkaq53#

我不知道有什么模块提供这样的功能,所以我想你需要用mod_ext_filter来编写你自己的output filter
但如果您控制了另一台服务器,则只需省略cookie的 domain 值就足够了,这样客户端将自动选择所请求的域作为cookie的域。

ff29svar

ff29svar4#

我最终只是创建了一个中间页面,通过javascript将cookie域更改为代理服务器(通过省略域值),然后将用户重定向到目标页面。这似乎解决了问题。感谢您的回答。

vc9ivgsu

vc9ivgsu5#

如果您的web应用捕获Host:头并使用它来确定cookie的domain=部分,您还可以考虑Apache指令ProxyPreserveHost On,它从客户端中继Host:头。
只有当你的应用被设计为假设其域名是客户端通过Host头建议的任何名称时,这才有效。如果你的应用是其中之一,这不仅会修复你的cookie,还会修复应用生成的任何绝对URL,这可以保存你需要enable mod_substitute的开销

ilmyapht

ilmyapht6#

ProxyPass         "/" "http://company.com/"
ProxyPassReverse  "/" "http://company.com/"
ProxyPassReverseCookieDomain "company.com" "app.company.com"

**注意:**如果它在ProxyPass中排在第二位,它在ProxyPassReverseCookieDomain中应该排在第一位...我花了半天或更长时间才弄明白:-/

另请参阅:https://httpd.apache.org/docs/2.4/mod/mod_proxy.html#proxypassreversecookiedomain

相关问题