Como você usa o Apache SetEnvIf com valores de cookie?

1

Estou tentando controlar o apache com base em valores de cookie, mas parece que não consigo usar SetEnvIf para trabalhar com HTTP_COOKIE . Eu reduzi isso a uma lógica simples para isolar o problema e ser fácil de testar.

Apache 2.2.22 no Ubuntu 12.04.1 LTS.

O que estou usando é:

     Header set Set-Cookie "cookie1=1"
     SetEnvIf HTTP_COOKIE "cookie1=1" is_cookie1
     Header set Set-Cookie "cookie2=2" env=is_cookie1

Usando a guia "Recursos do Chrome", estou inspecionando os cookies da página. O que eu espero ver é:

  • Carregamento da primeira página, cookie1=1 exists
  • Segundo (e subseqüente) carregamento de páginas, cookie1=1 e cookie2=2 existem.

Em vez disso, tudo que recebo é cookie1 :

Seeuadicionaralinha:

SetEnvIfRemote_Addr^192\.168\.is_cookie1

Entãocookie2édefinidoimediatamente,comoeuesperava,entãoaúltimalinhaHeader...env=is_cookie1pareceestarbem.

EutambémtenteiverificarseHTTP_COOKIEestavasendoconfiguradocorretamente:

RewriteRule^/test/$/test/%{HTTP_COOKIE}[R=302,L]

Agora,irpara/test/éredirecionadoimediatamentepara/test/cookie1=1%3b%20cookie2=2comoeuesperavae,portanto,HTTP_COOKIEpareceestardefinidocorretamente.

EutambémtenteiváriasvariaçõesdeSetEnvIfenadaparecefuncionar:

SetEnvIfHTTP_COOKIE"^cookie1=1$" is_cookie1
     SetEnvIf HTTP_COOKIE ^cookie1=1$ is_cookie1
     SetEnvIf HTTP_COOKIE "^.+$" is_cookie1
     SetEnvIf HTTP_COOKIE ^.+$ is_cookie1

.. embora

     SetEnvIf HTTP_COOKIE ^.*$ is_cookie1

define o cookie2 imediatamente (no primeiro carregamento) em qualquer situação (o que ... não é útil, mas pelo menos me diz que esta linha faz alguma coisa ).

O que estou fazendo de errado?

    
por gregmac 25.09.2013 / 05:06

2 respostas

2

Eu estava enfrentando o mesmo problema e essa página aparece no topo do Google por apache setenvif cookie , então pensei em compartilhar como resolvi isso.

Consegui fazer correspondência com os cookies usando a variável Cookie em vez da variável HTTP_COOKIE , por exemplo

SetEnvIf Cookie "cookie1=1" is_cookie1
    
por 29.05.2014 / 17:59
0

Não sei se isso resolverá seu problema, mas posso oferecer duas coisas:

  1. um palpite de que, mesmo que você tenha ordenado as diretivas corretamente [Header ... SetEnvIf ... Header ...], a ordem de processamento do relevante módulos fornecendo essas diretivas podem tornar sua interação um problema. O que sugere que um ângulo de ataque alternativo pode valer a pena tentar.

  2. um mecanismo diferente para a configuração de cookie pode ajudar: tente usar uma regra de regravação de mod_rewrite que não roteie a solicitação de fato (observe o "-" destino), mas apenas define um cookie:

    RewriteRule ^ / index.html - [CO = cookiename: cookieval: .example.com: 1440: /]

Você pode adicionar um RewriteCond para verificar o env var e, assim, definir condicionalmente o cookie da seguinte forma:

RewriteCond %{ENV:VARNAME} value
RewriteRule ^/index\.html - [CO=cookiename:cookieval:.example.com:1440:/]

Pode até atender aos seus requisitos para pular a configuração env envs por completo e apenas definir o segundo cookie com base na presença do primeiro, mantendo toda a lógica dentro do mod_rewrite:

RewriteCond %{HTTP_COOKIE} cookie1
RewriteRule ^/index\.html - [CO=cookie2:2:.example.com:1440:/]

HTH! :) Chris

    
por 27.01.2014 / 20:29

Tags