Como deletar todos os cookies de UIWebView?

91

Em meu aplicativo, tenho um UIWebviewque carrega a página de autenticação do LinkedIn para fazer o login. Quando o usuário efetua login, os cookies são salvos no aplicativo.

Meu aplicativo tem um botão de logout que não está relacionado ao login do LinkedIn. Portanto, quando o usuário clica neste botão, ele se desconecta do aplicativo. Quero que esse logoff apague seus cookies do LinkedIn também do aplicativo, para que o usuário saia completamente.

Vaibhav Saran
fonte

Respostas:

209

De acordo com esta pergunta , você pode percorrer cada cookie no "Biscoito" e excluí-los, assim:

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [storage cookies]) {
   [storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];
Sergio Moura
fonte
@Felipe Encontrada uma maneira temporária, precisa excluir os cookies no carregamento do aplicativo se você fizer logout da última vez.
Ishu
@Ishu bem, sim, é exatamente o que estou fazendo agora, mas não responde à pergunta sobre como REALMENTE deletar cookies para sempre e não apenas para a sessão atual
Felipe Brahm
Exclui cookies permanentemente. Quaisquer solicitações feitas depois disso podem resultar na recriação dos cookies. Além disso, se você deseja excluir cookies apenas para situações em que um usuário está fazendo logout, eu recomendaria excluir apenas cookies de sessão, já que o logout é, na verdade, apenas o encerramento da sessão. Caso contrário, você perderá as configurações potenciais que um usuário deseja que persistam nas sessões.
dsingleton
19
Certifique-se de chamar [[NSUserDefaults standardUserDefaults] synchronize] para garantir que as alterações sejam salvas no disco. @felipe é por isso que você está vendo o retorno dos cookies nas execuções subsequentes.
Yetanotherjosh
Eu tentei isso, mas o armazenamento retorna 0 contagem, eu testei no simulador iOS 8. Então, como posso fazer para excluir cookies do facebook no safari.
Nada Gamal de
8

Só queria adicionar algumas informações sobre isso.

No OS X 10.9 / iOS 7 e posterior, você pode usar -resetWithCompletionHandler: para limpar os cookies e o cache etc. de todo o aplicativo de seu sharedSession:

Esvazia todos os cookies, caches e armazenamentos de credenciais, remove arquivos de disco, libera downloads em andamento para o disco e garante que solicitações futuras ocorram em um novo soquete.

[[NSURLSession sharedSession] resetWithCompletionHandler:^{
    // Do something once it's done.
}];

O loop for-In comdeleteCookie: sons como modificando ao enumerar uma coleção para mim. (Não sei, pode ser uma má ideia?)

Cai
fonte
Eu usei os dois métodos que foram executados com sucesso, mas ainda estou descobrindo que o Google ainda está mostrando um histórico de pesquisa depois de tudo isso (não conectado). Alguma ideia? Obrigado
mylogon
Isso afetará qualquer estado do Alamofire e meu consumo de minhas APIs REST de backend? A Alamofire não baseia sua solução na URLSession?
Sajjon
1

Você poderia fazer uma função dentro do html do WebView, que limpa os cookies.

Se você precisa que a limpeza seja feita apenas uma vez, você pode acionar esta função com um evento Titanium, apenas quando o aplicativo é iniciado.

jack kallis
fonte
1

Se alguém estiver procurando por uma solução Swift:

    let storage = HTTPCookieStorage.shared
    if let cookies = storage.cookies{
        for cookie in cookies {
             storage.deleteCookie(cookie)
        }
    }
Saleh Enam Shohag
fonte