根据网址和引荐来源删除Cookie

时间:2018-04-04 09:53:29

标签: apache .htaccess mod-rewrite apache2

如果特定页面请求包含特定推荐人,是否可以通过Apache删除特定Cookie

我发现了一个类似的问题,一般是删除cookie(How to remove a cookie in Apache),但这不会使用任何条件或cookie名称。

我的具体用例是:如果请求的网址是“/ choose-language”,则删除(或取消设置它的值)名为“country”的cookie,并且referrer是“www.external.domain”。

目前可以使用以下Apache模块:

core mod_so mod_watchdog http_core mod_log_config mod_logio     
mod_version mod_unixd mod_access_compat mod_alias mod_auth_basic 
mod_authn_core mod_authn_file mod_authz_core mod_authz_host 
mod_authz_user mod_autoindex mod_deflate mod_dir mod_env mod_expires 
mod_filter mod_headers mod_mime prefork mod_negotiation mod_php7 
mod_proxy mod_proxy_fcgi mod_remoteip mod_rewrite mod_setenvif 
mod_socache_shmcb mod_ssl mod_status

2 个答案:

答案 0 :(得分:3)

如下所示:

RewriteEngine On
RewriteCond %{HTTP_REFERER} "^www\.external\.domain$"
RewriteRule "/choose-language" - [E=SetCookie:1]

Header set Set-Cookie cookieName= ENV=SetCookie

使用mod_rewrite设置环境变量,然后将其与mod_headers一起使用以修改相关标头。

此示例发送Set-Cookie标头以将cookieName设置为空值。我不知道您的上游应用程序正在做什么,所以这可能不是正确的配置,但使用Header unsetHeader merge代替Header set应该会产生正确的结果。更多信息here

最重要的部分是使用RewriteCondRewriteRule指令来设置环境变量SetCookie。一旦你有了这个,就应该直截了当地找出删除或覆盖cookie的正确答案。

答案 1 :(得分:3)

您加载的模块意味着Apache 2.4可以访问<If>Header上的条件表达式

<If "%{HTTP_REFERER} =~ /www.external.domain/ && %{REQUEST_URI} == '/choose-language'">
  Header add Set-Cookie country=
</If>

Header add Set-Cookie country= "expr=%{HTTP_REFERER} =~ /www.external.domain/ && %{REQUEST_URI} == '/choose-language'"