2009-11-25 2 views
13

Ho bisogno di rimuovere un cookie dalla richiesta HTTP che arriva al server. Farlo sul client (che scrive questo cookie) o sul server (che lo legge) non è un'opzione. Ho Apache 2.0 che invia richieste tra client e server, quindi speravo di rimuovere il cookie proprio lì in Apache usando mod_rewrite.Come rimuovere un cookie in Apache

La mia domanda è, c'è un modo per rimuovere un determinato cookie dalla richiesta HTTP utilizzando mod_rewrite?

Se non è possibile rimuovere solo un biscotto poi come ultima risorsa per rimuovere tutte le cookie dalla richiesta?

Sono aperto ad altri suggerimenti su come eseguire questa operazione se mod_rewrite non è lo strumento adatto per questa attività.

+3

è possibile riscrivere i cookie tramite mod_rewrite utilizzando il flag CO –

risposta

19

Apache mod_rewrite consente la manipolazione di URL ma non di intestazioni HTTP, tuttavia 'mod_headers' consentirà di farlo.

Quindi, è possibile utilizzare:

RequestHeader unset Cookie 

Questo eliminerà tutti i cookie dalla richiesta. Non sono sicuro se sia possibile rimuovere solo un particolare cookie utilizzando questa tecnica.

In alternativa, è possibile arrestare i cookie vengono passati al client utilizzando:

Header unset Set-Cookie 

se questo è più appropriato.

+0

E 'possibile impostare i cookie con mod \_riscrivere. Ma per quanto ne so solo per la risposta al cliente. – Gumbo

+0

Copia/Incolla FTW. –

7

È possibile gestire i cookie specifici utilizzando seguenti dichiarazioni in Apache configurazioni proxy inverso:

Per rimuovere qualsiasi cookie specifico è possibile utilizzare:
'Header aggiungere Set-Cookie "ANY_COOKIE = ''; scade = 'SOME_DATE_IN_PAST' ; Max-Age = 0; Path = COOKIE_PATH " '

Specificando la data passata, si comunica al browser che il cookie è scaduto e il browser scarterà il cookie.

aggiungere alcun biscotto si può usare:
'Header aggiungere Set-Cookie "ANY_COOKIE = 'ANY_VALUE'; scade = 'SOME_FUTURE_DATE'; Path = COOKIE_PATH"'

Assicurati di specificare il po ' data futura. Se non si specifica alcuna data, il cookie verrà considerato cookie di sessione.

Provare a utilizzare il seguente per rimuovere cookie specifico da richiesta:

'RequestHeader aggiungere Cookie "ANY_COOKIE = ''; scade = 'SOME_PAST_DATE'; Path = COOKIE_PATH"'

+1

Prova a utilizzare quanto segue per rimuovere cookie specifici dalla richiesta: ** 'RequestHeader aggiungi cookie "ANY_COOKIE =' '; expires =' SOME_PAST_DATE '; Path = COOKIE_PATH"' ** –

+0

Penso che RequestHeader aggiunga Cookie creerà effettivamente 3 cookie per te . (ANY_COOKIE, scaduto e Path) che potrebbe non essere quello che desideri. –

6

Con Apache> 2.2 .4, you could have used:

RequestHeader edit Cookie "^(.*?)ANY_COOKIE=.*?;(.*)$" $1$2 
+4

Questo: 'RequestHeader edit Cookie"^(. *?) Ssosession =. *? (?: $ |;) (. *) $ "$ 1 $ 2' funziona anche se l'intestazione non termina con un'; '. – Simon

+0

'Cookie di modifica RequestHeader ANY_COOKIE = [^;] *? ($ |;) Anche" "dovrebbe funzionare: in questo modo non è necessario acquisire le parti del prefisso/postfix e rimetterle. – Coke

0

Io lo uso per disinserire tutti i cookie (buona per servire contenuti statici)

Header unset Cookie 
Header unset Set-Cookie