Как удалить все файлы cookie UIWebView?

91

В моем приложении у меня есть UIWebviewстраница, загружающая linkedin auth для входа в систему. Когда пользователь входит в систему, файлы cookie сохраняются в приложении.

В моем приложении есть кнопка выхода, которая не связана с входом в linkedin. Поэтому, когда пользователь нажимает на эту кнопку, он выходит из приложения. Я хочу, чтобы этот выход из системы удалял его файлы cookie linkedin также из приложения, чтобы пользователь полностью вышел из системы.

Вайбхав Саран
источник

Ответы:

209

В соответствии с этим вопросом вы можете просмотреть все файлы cookie в «Cookie Jar» и удалить их, например:

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (NSHTTPCookie *cookie in [storage cookies]) {
   [storage deleteCookie:cookie];
}
[[NSUserDefaults standardUserDefaults] synchronize];
Серхио Моура
источник
@Felipe Нашел временный способ, нужно удалить файлы cookie при загрузке приложения, если вы выходили из системы в последний раз.
Ishu
@Ishu ну да, это именно то, что я делаю сейчас, но на самом деле это не отвечает на вопрос о том, как ДЕЙСТВИТЕЛЬНО удалить куки навсегда, а не только для текущего сеанса
Фелипе Брам
Он удаляет файлы cookie навсегда. Любые запросы, сделанные позже, могут привести к воссозданию файлов cookie. Кроме того, если вы хотите удалить файлы cookie только для ситуаций, когда пользователь выходит из системы, я бы рекомендовал удалить только файлы cookie сеанса, поскольку выход из системы на самом деле является просто завершением сеанса. В противном случае вы потеряете потенциальные настройки, которые пользователь желает сохранить во время сеанса.
dsingleton
19
Обязательно вызовите [[NSUserDefaults standardUserDefaults] synchronize], чтобы убедиться, что изменения сохранены на диск. @felipe, поэтому вы видите, что файлы cookie возвращаются при последующих запусках.
Yetanotherjosh
Я пробовал это, но хранилище возвращает 0 счетчиков, я тестирую его на симуляторе iOS 8. Итак, как я могу удалить файлы cookie 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?
Sajjon
1

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

Если вам нужно выполнить очистку только один раз, вы можете запустить эту функцию с событием Titanium, только при запуске приложения.

Джек Каллис
источник
1

Если кто-то ищет быстрое решение:

    let storage = HTTPCookieStorage.shared
    if let cookies = storage.cookies{
        for cookie in cookies {
             storage.deleteCookie(cookie)
        }
    }
Салех Энам Шохаг
источник