2016-06-28 92 views
1

我想通過WKwebview接收包含登錄狀態的cookie。如何從WKwebview(IOS)獲取cookie

我終於要被接收cookie數據,分析它們,然後改變爲登錄的用戶視圖

我有什麼累: webview.evaluateJavascript(「document.cookie.search( 'LoginSession = Y')「){(data,error) - > ..... }

結果:如果數據是'data> = 1',登錄狀態(IOS應用程序中的變量)= true,但是在0以下(數據< 0),登錄狀態將爲false。

它的作品像一個魅力看似爲我的應用程序。

但是,這種方式看起來非常物理和簡單,所以我認爲它對某些用戶來說可能並不安全,並且可能無法保證完美地適用於所有使用IOS的環境。

問題1:這不危險嗎?問題2:我聽說IOS不像其他平臺那樣在內存中存儲Cookie,我們可以設法通過一些代碼從內存加載cookie數據。是否有推薦的庫供開發人員處理來自WKWEB的Cookie?

回答

0

禮貌:宋思雨的Answer

您可以訪問一個NSHTTPURLResponse對象- webView:decidePolicyForNavigationResponse:decisionHandler:方法上WKNavigationDelegate定義。您可以稍後從HTTP頭中手動提取Cookie:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler { 
    NSArray *cookies = [NSHTTPCookie cookiesWithResponseHeaderFields:[response allHeaderFields] forURL:[NSURL URLWithString:@""]]; 
    for (NSHTTPCookie *cookie in newCookies) { 
     // Do something with the cookie 
    } 

    decisionHandler(WKNavigationResponsePolicyAllow); 
} 

如果您有更好的解決方案,請發佈您的解決方案。

+0

是的,你可以得到一些,但它仍然不是餅乾的整個列表 – ikzjfr0

0

我試過了。 Javascript以「key = value;」形式返回一個包含所有cookie的字符串 我不知道它有多穩定。希望能幫助到你。

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation{ 

    [webView evaluateJavaScript:@"document.cookie;" completionHandler:^(NSString *result, NSError *error) 
    { 
    NSLog(@"Error getting cookies: %@",error); 
    [self updateCookies:result]; 
    }]; 
} 
+0

沒有爲我工作 – ZAFAR007