如何在 Apache 中删除 cookie
Posted
技术标签:
【中文标题】如何在 Apache 中删除 cookie【英文标题】:How to remove a cookie in Apache 【发布时间】:2010-12-20 09:13:26 【问题描述】:我需要从到达服务器的 HTTP 请求中删除一个 cookie。在客户端(写入此 cookie)或服务器(读取它)上执行此操作不是一种选择。我有 Apache 2.0 代理客户端和服务器之间的请求,所以我希望使用 mod_rewrite 在 Apache 中删除 cookie。
我的问题是,有没有办法使用 mod_rewrite 从 HTTP 请求中删除某个 cookie?
如果无法仅删除 一个 cookie,那么作为最后的手段从请求中删除 所有 cookie?
如果 mod_rewrite 不是完成此任务的正确工具,我愿意接受有关如何完成此任务的其他建议。
【问题讨论】:
您可以使用 CO 标志使用 mod_rewrite 重写 cookie 【参考方案1】:Apache mod_rewrite
允许操纵 URL,但不允许操纵 HTTP 标头,但是 'mod_headers' 将允许您这样做。
所以,你可以使用:
RequestHeader unset Cookie
这将从请求中删除 所有 cookie。我不确定是否可以使用这种技术仅删除特定的 cookie。
或者,您可以使用以下方法停止将 cookie 传递回客户端:
Header unset Set-Cookie
如果这样更合适的话。
【讨论】:
可以使用 mod_rewrite 设置 cookie。但据我所知,仅用于对客户的响应。【参考方案2】:使用 Apache > 2.2.4,you could have used:
RequestHeader edit Cookie "^(.*?)ANY_COOKIE=.*?;(.*)$" $1$2
【讨论】:
This:RequestHeader edit Cookie "^(.*?)ssosession=.*?(?:$|;)(.*)$" $1$2
即使标题不以;
结尾也有效。
RequestHeader edit cookie ANY_COOKIE=[^;]*?($|;) ""
也应该可以工作:这样您就不必捕获前缀/后缀部分并将它们放回原处。【参考方案3】:
您可以在 apache 反向代理配置中使用以下语句来管理特定的 cookie:
要删除任何特定的 cookie,您可以使用:'标题添加 Set-Cookie "ANY_COOKIE='';expires='SOME_DATE_IN_PAST'; Max-Age=0; Path=COOKIE_PATH" '
通过指定过去的日期,您告诉浏览器 cookie 已过期,浏览器将丢弃 cookie。
要添加您可以使用的任何 cookie:'Header add Set-Cookie "ANY_COOKIE='ANY_VALUE';expires='SOME_FUTURE_DATE'; Path=COOKIE_PATH"'
请务必指定某个未来的日期。如果您不指定任何日期,cookie 将被视为会话 cookie。
尝试使用以下方法从请求中删除特定的 cookie:
'RequestHeader add Cookie "ANY_COOKIE='';expires='SOME_PAST_DATE'; Path=COOKIE_PATH"'
【讨论】:
尝试使用以下方法从请求中删除特定 cookie:'RequestHeader add Cookie "ANY_COOKIE='';expires='SOME_PAST_DATE'; Path=COOKIE_PATH"' 我认为 RequestHeader add Cookie 实际上会为您创建 3 个 cookie。 (ANY_COOKIE, expired and Path) 这可能不是你想要的。【参考方案4】:我用它来取消设置所有 cookie(适合提供静态内容)
Header unset Cookie
Header unset Set-Cookie
【讨论】:
以上是关于如何在 Apache 中删除 cookie的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Apache HttpClient 4.3 处理 Cookie
如何在 symfony2 中删除 Session 和 cookie