Я создаю приложение, использующее 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, если это возможное решение здесь.