Swift
WKWebView

WKWebViewのCookieが完全に削除できてなくなぜかセッション残っている…こわい

WKWebViewでログインして

Cookie削除

WKWebView表示…あれ?残ってる、情報が残っている…こわい

を削除したくてやっとこさ見つけたのが
https://github.com/jwfriese/FrequentFlyer/blob/50200c61b7502b03748f235cc02ae8d894ef7015/FrequentFlyer/HTTP/HTTPSessionUtils.swift

のやつ助かりました。これでこわいのはなくなりました。

ちなみにCookie削除仕切れなかったもの🙅…いかにも削除しました系なのに…

import WebKit

if let cookies = HTTPCookieStorage.shared.cookies {
    for cookie in cookies {
        HTTPCookieStorage.shared.deleteCookie(cookie)
    }
}

ちゃんと削除できたもの🙆

import WebKit

URLSession.shared.reset {} //cookieやキャッシュのリセット
UserDefaults.standard.synchronize() //データの同期 いらない同期をあとで同期して変に値を残さないためな気がする。

let dataStore = WKWebsiteDataStore.default() //WKWebsiteに保存されている全ての情報の削除
dataStore.fetchDataRecords(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes()) { records in
    dataStore.removeData(ofTypes: WKWebsiteDataStore.allWebsiteDataTypes(), for: records, completionHandler: {})
}

しかしこれでも消えないことがある😱なぜ?

答え

https://qiita.com/ShingoFukuyama/items/eede79a284c3669846e9

スクリーンショット 2018-07-10 21.20.23.png

に書かれているようにCookieの共有をするためにWKProcessPoolを使っているときはこれも初期化しないといけないらしいです( ・ὢ・ )
初期化は以下のextension書いてCookieの削除をする時に以下呼ぶようにしました。ちょっとなんとなく納得いく書き方じゃないけどとりあえず。

WKProcessPool.shared.reset()
extension WKProcessPool {
   static var shared = WKProcessPool()

   func reset(){
       WKProcessPool.shared = WKProcessPool()
   }
}

色々ツッコミどころあるかもですがgithuburl乗せておきます。
指摘などは優しく教えていただけると嬉しいです。

githuburl

https://github.com/sachiko-kame/WKWebViewSample

補足:
githubのところfacebookでなんでやっているの?に関してですが(誰にもまだ聞かれていない)、ログイン状態あるものなら正直なんでもよかったんですってだけです。( ・ὢ・ )

おまけ

あと、ios10でbodyが渡せないからってリクエスト送ってそれをloadHTMLで表示するといいと書いてありましたがうまく行かずloadHTMLに実際行う動作書いてそのHTMLのボタンを開いた時点で勝手に押すを行いました。

最後に…

WKWebViewって、ios10ではbodynilになるし、なんか色々めんどくさいですね。でも色々いいところもあると思って。