Як видалити всі файли cookie UIWebView?


91

У моїй програмі я UIWebviewзавантажую сторінку автентифікації linkedin для входу. Коли користувач входить, файли cookie зберігаються в додатку.

У моєму додатку є кнопка виходу, яка не пов’язана із входом у систему. Отже, коли користувач натискає цю кнопку, він виходить із програми. Я хочу, щоб цей вихід не видалив зв’язані файли cookie з програми, щоб користувач повністю вийшов з системи.

Відповіді:


209

Згідно з цим запитанням , ви можете переглянути кожен файл cookie в "Банку для файлів cookie" та видалити їх приблизно так:

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [storage cookies]) {
   [storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];

@Felipe Знайшов тимчасовий спосіб, потрібно видалити файли cookie під час завантаження програми, якщо ви виходили минулого разу.
Ішу

@Ishu ну, так, це саме те, що я зараз роблю, але насправді це не відповідає на питання про те, ДЕЙСТВИВО видаляти файли cookie назавжди, а не лише для поточної сесії
Феліпе Брам,

Він видаляє файли cookie назавжди. Будь-які запити, зроблені після, можуть призвести до відтворення файлів cookie. Крім того, якщо ви хочете видалити файли cookie лише для ситуацій, коли користувач виходить із системи, то я б рекомендував видалити лише файли cookie сеансу, оскільки вихід із системи насправді є лише припиненням сеансу. В іншому випадку ви втратите потенційні налаштування, які користувач бажає зберігати протягом сеансів.
dsingleton

19
Обов’язково зателефонуйте [[NSUserDefaults standardUserDefaults] синхронізація], щоб переконатися, що зміни збережено на диску. @felipe ось чому ви бачите, як файли cookie повертаються під час наступних запусків.
Yetanotherjosh

Я спробував це, але пам'ять повертає 0, я перевіряю його на iOS 8 Simulator. Отже, як я можу зробити, щоб видалити куки facebook в сафарі.
Нада Гамаль

8

Просто хотів додати трохи інформації щодо цього.

В OS X 10.9 / iOS 7 і пізніших версіях ви можете використовувати -resetWithCompletionHandler: для очищення файлів cookie, кеш-пам’яті тощо в цілому додатку з вашого sharedSession:

Видаляє всі файли cookie, кеш-пам’ять та сховища облікових даних, видаляє файли диска, очищає незавершені завантаження на диск і гарантує, що майбутні запити відбуватимуться в новому сокеті.

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

Цикл for-In зі deleteCookie:звуками, схожими на модифікацію під час перерахування колекції для мене. (Не знаєте, це може бути поганою ідеєю?)


Я використовував обидва методи, які успішно працюють, але я все ще виявляю, що Google все ще показує історію пошуку після всього цього (не ввійшов в систему). Будь-які ідеї? Дякую
mylogon

Чи вплине це на будь-який стан Alamofire та моє споживання моїх Backend REST API? Чи не Alamofire базує своє рішення на URLSession?
Саджон

1

Ви можете створити функцію всередині html WebView, яка очищає файли cookie.

Якщо вам потрібно виконати очищення лише один раз, ви можете запустити цю функцію з подією Titanium, лише коли програма запускається.


1

Якщо хтось шукає швидке рішення:

    let storage = HTTPCookieStorage.shared
    if let cookies = storage.cookies{
        for cookie in cookies {
             storage.deleteCookie(cookie)
        }
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.