Como você remove um cookie em um servlet Java?
Eu tentei isso: http://www.jguru.com/faq/view.jsp?EID=42225
EDIT: O seguinte agora funciona com sucesso, parece ser a combinação de:
response.setContentType("text/html");
e
cookie.setMaxAge(0);
Antes de eu fazer:
//remove single signon cookie if it hasn't been validated yet
response.setContentType("text/html");
Cookie cookie = new Cookie(SSORealm.SSO_COOKIE_NAME, "");
cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(-1);
cookie.setPath("/");
cookie.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
response.addCookie(cookie);
Que expira o cookie quando o navegador é fechado conforme a documentação .
Um valor negativo significa que o cookie não é armazenado persistentemente e será excluído quando o navegador da Web sair. Um valor zero faz com que o cookie seja excluído.
O snippet de trabalho completo para expirar um cookie é:
//remove single signon cookie if it hasn't been validated yet
response.setContentType("text/html");
Cookie cookie = new Cookie(SSORealm.SSO_COOKIE_NAME, "");
cookie.setDomain(SSORealm.SSO_DOMAIN);
cookie.setMaxAge(0);
cookie.setPath("/");
cookie.setComment("EXPIRING COOKIE at " + System.currentTimeMillis());
response.addCookie(cookie);
No meu ambiente, o código a seguir funciona. Embora pareça redundante à primeira vista,
cookies[i].setValue("");
ecookies[i].setPath("/");
são necessários para limpar o cookie corretamente.fonte
Lembre-se de que um cookie é realmente definido pela tupla de seu nome, caminho e domínio. Se qualquer um desses três for diferente ou se houver mais de um cookie com o mesmo nome, mas definido com caminhos / domínios que ainda possam estar visíveis para o URL em questão, você ainda verá que o cookie foi passado na solicitação. Por exemplo, se o URL for " http://foo.bar.com/baz/index.html ", você verá quaisquer cookies definidos em bar.com ou foo.bar.com, ou com o caminho "/" ou "/ baz".
Portanto, o que você parece deve funcionar, desde que haja apenas um cookie definido no cliente, com o nome "SSO_COOKIE_NAME", domínio "SSO_DOMAIN" e caminho "/". Se houver cookies com caminho ou domínio diferente, você ainda verá o cookie enviado ao cliente.
Para depurar isso, acesse as preferências do Firefox -> guia Segurança e procure todos os cookies com o SSO_COOKIE_NAME. Clique em cada um para ver o domínio e o caminho. Aposto que você encontrará um que não é exatamente o que você está esperando.
fonte
isso não funcionou? Isso remove todos os cookies se a resposta for enviada de volta.
fonte
Este é o código que eu efetivamente usei antes, passando
"/"
como o parâmetro strPath.fonte
Um caso especial: um cookie não tem caminho.
Nesse caso, defina o caminho como
cookie.setPath(request.getRequestURI())
O javascript define o cookie sem o caminho para que o navegador o mostre como cookie apenas para a página atual. Se eu tentar enviar o cookie expirado com
path == /
o navegador, mostramos dois cookies: um expirado compath == /
e outro compath == current page
.fonte