Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache 更改Cookie域_Apache_Mod Rewrite_Dns_Session Cookies - Fatal编程技术网

Apache 更改Cookie域

Apache 更改Cookie域,apache,mod-rewrite,dns,session-cookies,Apache,Mod Rewrite,Dns,Session Cookies,我使用apache作为我的应用程序web服务器的代理,并希望随时更改与sessionid cookie关联的域名 cookie有一个与之关联的.company.com域,我想使用apache mod rewrite(或类似的模块),透明地将该域更改为app.company.com。这可能吗?如果是这样的话,人们会怎么做呢?我不知道有哪个模块提供这种功能。所以我想你需要自己写一篇文章来为你做这件事 但是,如果您可以控制另一台服务器,只需省略cookie的域值就足够了,这样客户机将自动选择请求的域作

我使用apache作为我的应用程序web服务器的代理,并希望随时更改与sessionid cookie关联的域名


cookie有一个与之关联的.company.com域,我想使用apache mod rewrite(或类似的模块),透明地将该域更改为app.company.com。这可能吗?如果是这样的话,人们会怎么做呢?

我不知道有哪个模块提供这种功能。所以我想你需要自己写一篇文章来为你做这件事


但是,如果您可以控制另一台服务器,只需省略cookie的域值就足够了,这样客户机将自动选择请求的域作为cookie的域。

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

您只能在客户端更改cookie的域,或者在服务器上设置cookie的域。设置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>
这只会重命名您在请求中收到的Cookie

ProxyPassReverseCookieDomain company.com app.company.com
或交换域(因为您没有明确定义哪些是内部/外部)


REF:

< P>如果您的Web应用程序正在捕获<代码>主机:域=部分,您也可以考虑Apache指令。

代理主机
它从客户端中继
主机:


只有当您的应用程序设计为假定其域名是客户机在主机头上建议的名称时,这才有效。如果你的应用程序就是其中之一,那么这不仅可以修复你的cookie,还可以修复应用程序生成的任何绝对URL,这可以节省你的开销,否则你需要在什么时候更改它?是为服务器还是为客户端?我不明白。在服务器上更改它。基本上,由于apache被配置为代理服务器,因此客户端和应用服务器之间的所有通信都通过apache服务器进行路由。我试图完成的是在cookie到达客户端之前,在apache代理中更改应用程序设置的cookie域。@user我明白了。我认为这是大型反向代理可以做的事情——不知道Apache是否能够做到这一点。不过我还是不明白你为什么需要这个。传出请求不会首先为代理域设置cookie吗?
app.company.example
是无效的域值。它需要是
.app.company.example
,或者省略它以便使用当前域。我最终只是创建了一个中间页面,通过javascript将cookie域更改为代理服务器(通过省略域值),然后将用户重新定向到目标页面。这似乎解决了问题。感谢您的回答。如果不是标题编辑集Cookie(.*)(domain=.company.com;)(.*)$1 domain=app.company.com$3当你在正则表达式中捕获3个模式并替换$2(域)时,这是一个很好的观点-我没有任何地方可以测试这个设置,所以也许?但我确实在某一点上成功了,并且复制了我当时的作品。那么也许两者都能起作用?这对我在Apache中根本不起作用
mod_headers
有效,但无法编辑
Set Cookie
标题。您的大多数回答都是对原始问题的误解的回应,关于“header edit Set Cookie”的有用信息似乎不起作用。原始海报很明显是在寻找类似ProxyPassReverseCookieDomain的东西。(2011年可能不存在)@dataless-我只知道这在2015年对我有用。。。这也许不是最好的办法,但它奏效了。我看了一眼,听起来好像
ProxyPassReverseCookieDomain
对我很有用!我没有做大量的Apache工作,但在试图为我们自己的用例找出如何实现这一点时,我将上述内容拼凑在了一起,没有看到听起来很棒的
ProxyPassReverseCookieDomain
ProxyPassReverseCookieDomain company.com app.company.com