簡體   English   中英

在iOS 8.4上清除WKWebView的Cookies

[英]Clearing Cookies for WKWebView on iOS 8.4

我正在構建一個使用單點登錄的應用程序,供用戶登錄。用戶輸入成功的ID和密碼后,Web端會返回我抓取並存儲在應用程序中的標題。 WKWebView還設置用戶成功登錄的cookie。 這是我想要避免或撤消的。

我看到的不受歡迎的行為是,如果我登錄用戶,一切順利,然后我將它們注銷並再次重新登錄,WKWebView認為用戶仍然登錄並將他們帶到了一個不受歡迎的行為URL。

在iOS 9中,緩解這一點非常簡單:

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

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

但是在iOS 8.4中,每次用戶加載單點登錄URL時都要確保cookie清晰,這樣會更復雜。

我嘗試過在NSHTTPCookieStorage.sharedHTTPCookieStorage()循環訪問cookie並刪除它們的方法。 不幸的是,cookie計數為0。

我還嘗試刪除NSFileManager.defaultManager()/Cookies目錄。 這也行不通。

那種工作的一件事是執行以下操作。 雖然這種方法不允許我獲取標題,因為登錄后需要重定向並且受到干擾(在iOS 9+和8.4中)

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

如果這是一個可能的解決方案,我deinit在我的視圖中刪除我的WKWebView。

這可能是一個遠景,但是如果覆蓋cookie接受政策以在登錄時拒絕所有cookie?

NSHTTPCookieStorage.sharedHTTPCookieStorage().cookieAcceptPolicy = .Never

另一個想法是使用自定義WKProcessPool子類手動管理cookie(實際上沒有記錄)。 我相信Firefox管理任何cookie問題的方式。

即使你提到它,這是你已經在你的deinit嘗試過的deinit嗎?

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM