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

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


person Zack Shapiro    schedule 28.06.2016    source источник
comment
Пожалуйста, проверьте мой ответ на аналогичный вопрос ниже: удалить кеш wkwebview в ios8"> stackoverflow.com/questions/38480867/   -  person Roman Ermolov    schedule 09.08.2016


Ответы (2)


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

NSHTTPCookieStorage.sharedHTTPCookieStorage().cookieAcceptPolicy = .Never

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

person JAL    schedule 30.06.2016
comment
@ZackShapiro извините, я буду думать о возможных решениях. - person JAL; 01.07.2016
comment
Спасибо JAL. Я ценю его. Сложность заключается в том, что метод req = NSMutableURLRequest(URL: url); req?.HTTPShouldHandleCookies = false работал до тех пор, пока удалялись файлы cookie в начале, но в конце, когда происходит перенаправление, возвращаются заголовки и файлы cookie устанавливаются, все это было предотвращено этим подходом. Я был бы рад, если бы я мог просто позволить этому процессу произойти, а затем очистить куки, прежде чем начнется следующий - person Zack Shapiro; 01.07.2016

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

let storage = NSHTTPCookieStorage.sharedHTTPCookieStorage()
        for cookie in storage.cookies! {
            storage.deleteCookie(cookie)
        }
person LS_    schedule 07.07.2016
comment
Я пробовал такой подход, да - person Zack Shapiro; 07.07.2016