2017-09-28 47 views
2

iOS 11では、Cookie管理を含むWKWebViewのいくつかの更新が行われています。私はのUIWebViewから私のアプリの移行を開始し、問題に遭遇しました:WKHttpCookieStore Cookieを削除する方法(deleteCookie:completionHandler:、Xamarinラッパー:DeleteCookieAsync)を提供していても、実際で、それはすべてのクッキー削除されません。ここに私のコードは次のとおりです。WKHttpCookieStoreからクッキーを削除するには?

NSHTTPCookie  
version:1 
name:c_user  
value:100015842... 
expiresDate:'2017-12-27 07:37:39 +0000'  
created:'2017-09-28 07:39:01 +0000'  
sessionOnly:FALSE 
domain:.facebook.com  
partition:none 
path:/ 
isSecure:TRUE 
path:"/" 
isSecure:TRUE 

をしかし、この1ではありません:たとえば

WKHttpCookieStore cookieStore = WKWebsiteDataStore.DefaultDataStore.HttpCookieStore; 

// Delete all cookies 
NSHttpCookie[] allCookies = await cookieStore.GetAllCookiesAsync(); 
foreach (NSHttpCookie cookieToDelete in allCookies) 
{ 
    await cookieStore.DeleteCookieAsync(cookieToDelete); 
} 

NSHttpCookie[] newCookies = await cookieStore.GetAllCookiesAsync(); 
// why newCookies is not an empty array? 

myWkWebView.LoadRequest(new NSUrlRequest(new NSUrl("https://facebook.com/"))); 

、このクッキーは削除されている

NSHTTPCookie  
version:1 
name:sb  
value:bKbMW......OJ1V 
expiresDate:'2019-09-28 07:37:39 +0000'  
created:'2017-09-28 07:39:15 +0000'  
sessionOnly:FALSE 
domain:.facebook.com  
partition:none 
path:/ 
isSecure:TRUE 
path:"/" 
isSecure:TRUE 

ネイティブスウィフトアプリで同じ問題。私はかなり同じコードはNSHttpCookieStorage + UIWebViewでうまく動作するので、かなり混乱しています。

これが期待どおりの動作ですか?もしそうなら、なぜですか? WKHttpCookieStoreでクッキーをクリーンにする方法はありますか?

答えて

1

列挙子の中から削除しないで、エラーは発生しませんが、削除されたクッキーは実際にはランダムで、セッションベースのものや、一時的なものは削除されません。

私はiOS radrsを検索していませんが、iOS 11の問題(Xamarinではなく)が「ほとんど」として存在しない場合は、開く必要があります。iOS Framework列挙型は、 。そうでない場合DeleteCookie(非同期)が私のクッキーモンスタールーチンNSError ...

を返す必要があります:

var cookies = await WKWebsiteDataStore.DefaultDataStore.HttpCookieStore.GetAllCookiesAsync(); 
for (int i = cookies.Length - 1; i >= 0; i--) 
{ 
    await WKWebsiteDataStore.DefaultDataStore.HttpCookieStore.DeleteCookieAsync(cookies[i]); 
} 
cookies = await WKWebsiteDataStore.DefaultDataStore.HttpCookieStore.GetAllCookiesAsync(); 
if (cookies.Length == 0) 
{ 
    Console.WriteLine("Cookie Monster ate them all"); 
} 
+0

ええ、iOSのバグのようです。 –

+0

私のために働いていません。私は、多くの回避策を試したが、まだ正しい解決策がない。 – CarLoOSX

0

私はそれがiOSのバグだという結論に跳ね上がりました。だから、代わりに今私はが空値でクッキーとそれらを交換していクッキーを削除の:あなたはNSHTTPCookieStorageを使用してみてください

NSDictionary properties = NSDictionary.FromObjectsAndKeys(
    objects: new NSObject[] 
    { 
     new NSString(cookieToDelete.Name ?? ""), 
     new NSString(""), 
     new NSString(cookieToDelete.Path ?? ""), 
     new NSString(cookieToDelete.Domain ?? ""), 
    }, 
    keys: new NSObject[]  
    { 
     NSHttpCookie.KeyName, 
     NSHttpCookie.KeyValue, 
     NSHttpCookie.KeyPath, 
     NSHttpCookie.KeyDomain, 
    } 
); 
NSHttpCookie cookieToReplace = NSHttpCookie.CookieFromProperties(properties); 
await cookieStore.SetCookieAsync(cookieToReplace); 
+0

あなたはそれらを「置き換える」必要はありません。私のコード例のように削除するだけです(ちょっと** foreach列挙子を使用しないでください) – SushiHangover

+0

@SushiHangover私は単純な 'for'を試しました。違いはなく、同じバグリー動作。 –

0

はなかったinsted?それらはリンクする必要がありますので、NSHTTPCookieStorageを変更することはWKCookieStorageに反映する必要があります

+0

TBH私は試していませんでしたが、少なくともNSHTTPCookieStorageとWKWebViewはiOS 10に接続されていません。 iOS 11を起動する際にいくつか変更がありますか? –

+0

hmm、iOS11での私の経験では(まだ10でテストしていませんでした)、WKWebViewのクッキーはNSHTTPCookieStorageに反映されます。クッキーはNSHTTPCookieStorageクッキーで短い遅延の後になります。 –

+0

ああ、私の最初のコメントは間違って、彼らは接続されています。なぜ私は私のアプリで 'NSHTTPCookieStorage'を使うことができなかったのか覚えています:_WKWebViewはおそらく、クッキーを自分のスケジュールでUIプロセスに同期させます。各ナビゲーションの後ではありません._ https://bugs.webkit.org/show_bug.cgi?id=140191私の場合、この遅延は短くはなかったし、ユーザーがログインするとすぐに反応する必要があるため、アプリでは受け入れられませんでした。 –

1

すべてのCookieを削除する場合は、WKWebsiteDataStoreで簡単に行うことができます。 Objective-Cで:

NSSet *websiteDataTypes = [NSSet setWithArray:@[WKWebsiteDataTypeCookies]]; 
NSDate *dateFrom = [NSDate dateWithTimeIntervalSince1970:0]; 
[[WKWebsiteDataStore defaultDataStore] removeDataOfTypes:websiteDataTypes 
              modifiedSince:dateFrom 
             completionHandler:nil]; 

これはiOS 9以降で動作することに注意してください。

+0

ありがとう、良い点。しかし、特定のドメインのクッキーを削除することも私にとって重要です。私はiOS 11.2で 'HttpCookieStore'から_deleting_をチェックしなければならないかもしれません。 –

関連する問題