Очистка файлов cookie для WKWebView на iOS 8.4

Я создаю приложение, использующее Single Sign On для входа в систему. После того, как пользователь вводит успешный идентификатор и пароль, веб-часть вещей возвращает заголовки, которые я захватываю и сохраняю в своем приложении. WKWebView также устанавливает cookie, который пользователь успешно выполнил. Это то, что я хочу избежать или отменить.

Нежелательное поведение, которое я вижу, заключается в том, что если я вхожу в систему с пользователем, все будет хорошо, а затем я выхожу из системы и снова войду в систему, WKWebView думает, что пользователь все еще входит в систему и принимает их к нежелательному URL.

В iOS 9, смягчение этого довольно просто:

let config = WKWebViewConfiguration()
config.websiteDataStore = WKWebsiteDataStore.nonPersistentDataStore()

let webView = WKWebView(frame: .zero, configuration: config)

Однако в iOS 8.4, делая все возможное, чтобы файлы cookie были очищены каждый раз, когда пользователь загружает URL-адрес Single Signing, сложнее.

Я пробовал подходы, в которых я просматриваю файлы cookie в NSHTTPCookieStorage.sharedHTTPCookieStorage() и удаляю их. К сожалению, количество файлов cookie равно 0.

Я также попытался удалить каталог /Cookies в NSFileManager.defaultManager(). Это также не работает.

Одна вещь, с которой работал, заключалась в следующем. Хотя этот подход не позволял мне получать заголовки, потому что перенаправление после входа в систему должно происходить, и это мешало (в iOS 9+ и 8.4)

req = NSMutableURLRequest(URL: url)
req?.HTTPShouldHandleCookies = false
let webView = WKWebView()
webView.loadRequest(req ?? NSURLRequest(URL: url))

Я бы предпочел очистить файлы cookie в deinit моего представления, которое содержит мой WKWebView, если это возможное решение здесь.

Ответ 1

Это может быть длинный, но как насчет переопределения политики принятия cookie для отклонения всех файлов cookie во время входа?

NSHTTPCookieStorage.sharedHTTPCookieStorage().cookieAcceptPolicy = .Never

Другая идея заключалась бы в том, чтобы вручную манипулировать файлами cookie с помощью пользовательского подкласса WKProcessPool (который действительно не документирован). Я считаю, что Firefox управляет любыми проблемами cookie.

Ответ 2

Даже если вы упомянули об этом, это тот подход, который вы уже пробовали в своем deinit?

let storage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
        for cookie in storage.cookies! {
            storage.deleteCookie(cookie)
        }