Я создаю приложение, которое использует единый вход для пользователей для входа в систему. После того, как пользователь вводит успешный идентификатор и пароль, веб-сторона вещей возвращает заголовки, которые я получаю и сохраняю в своем приложении. 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-адрес единого входа, является более сложной задачей.
Я пробовал подходы, когда я перебираю файлы 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))
Я бы предпочел очистить куки-файлы в deinit
моего представления, которое содержит мой WKWebView, если это возможное решение здесь.