Comment supprimer tous les cookies de UIWebView?

91

Dans mon application, j'ai une UIWebviewpage d'authentification LinkedIn qui charge la connexion. Lorsque l'utilisateur se connecte, les cookies sont enregistrés dans l'application.

Mon application dispose d'un bouton de déconnexion qui n'est pas lié à la connexion LinkedIn. Ainsi, lorsque l'utilisateur clique sur ce bouton, il se déconnecte de l'application. Je veux que cette déconnexion efface également ses cookies LinkedIn de l'application, afin que l'utilisateur se déconnecte complètement.

Vaibhav Saran
la source

Réponses:

209

Selon cette question , vous pouvez parcourir chaque cookie dans le "Cookie Jar" et les supprimer, comme ceci:

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [storage cookies]) {
   [storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];
Sergio Moura
la source
@Felipe Trouvé un moyen temporaire, besoin de supprimer les cookies dans le chargement de l'application si vous vous déconnectez la dernière fois.
Ishu
@Ishu eh bien, oui, c'est exactement ce que je fais maintenant, mais cela ne répond pas vraiment à la question de savoir comment supprimer VRAIMENT les cookies pour toujours et pas seulement pour la session en cours
Felipe Brahm
Il supprime définitivement les cookies. Toute demande effectuée après peut entraîner la recréation des cookies. De plus, si vous souhaitez supprimer les cookies uniquement dans les situations où un utilisateur se déconnecte, je vous recommande de ne supprimer que les cookies de session, car la déconnexion n'est en réalité qu'une fin de session. Sinon, vous perdez les paramètres potentiels qu'un utilisateur souhaite conserver entre les sessions.
dsingleton
19
Assurez-vous d'appeler [[NSUserDefaults standardUserDefaults] synchronize] pour vous assurer que les modifications sont enregistrées sur le disque. @felipe c'est pourquoi vous voyez les cookies revenir lors des exécutions suivantes.
Yetanotherjosh
J'ai essayé cela mais le stockage retourne 0 compte, je le teste sur le simulateur iOS 8. Alors, comment puis-je faire pour supprimer les cookies de Facebook sur Safari.
Nada Gamal
8

Je voulais juste ajouter quelques informations à ce sujet.

Sous OS X 10.9 / iOS 7 et versions ultérieures, vous pouvez utiliser -resetWithCompletionHandler: pour effacer les cookies et le cache, etc. de l'ensemble de l'application de votre sharedSession:

Vide tous les cookies, caches et magasins d'informations d'identification, supprime les fichiers disque, vide les téléchargements en cours sur le disque et garantit que les demandes futures se produiront sur un nouveau socket.

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

La boucle for-In avec des deleteCookie:sons comme la modification en énumérant une collection pour moi. (Je ne sais pas, cela pourrait être une mauvaise idée?)

Cai
la source
J'ai utilisé les deux méthodes qui fonctionnent avec succès, mais je constate toujours que Google affiche toujours un historique de recherche après tout cela (non connecté). Des idées? Merci
mylogon
Cela affectera-t-il l'état d'Alamofire et ma consommation de mes API REST Backend? Alamofire ne base-t-il pas sa solution sur URLSession?
Sajjon
1

Vous pouvez créer une fonction à l'intérieur du html de WebView, qui nettoie les cookies.

Si vous ne souhaitez effectuer le nettoyage qu'une seule fois, vous pouvez déclencher cette fonction avec un événement Titanium, uniquement au démarrage de l'application.

Jack Kallis
la source
1

Si quelqu'un recherche une solution Swift:

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