Afzonderlijke koekjestrommel per WebView in OS X

Ik heb geprobeerd het doel te bereiken van een unieke (niet gedeelde) koekjestrommel per WebView in macOS (cookiesbeheer werkt anders voor iOS).

Na het lezen van veel vragen over StackOverflow en het doorzoeken van de documenten, vond ik in deze artikelen de beste oplossing voor mijn probleem:

Ik heb een voorbeeld-app opgezet die ze gebruikt: https://github.com/jjconti/ swift-webview-geïsoleerd

Het basisidee is om de noodzakelijke methoden van de WebResourceLoadDelegate- en WebPolicyDelegate-protocollen te implementeren en BSHTTPCookieStorage te gebruiken om cookies op te slaan en op te halen. Bovendien staat mijn voorbeeld-app het opslaan van het cookieStorage-object toe, zodat het bij toekomstige uitvoeringen opnieuw kan worden geladen.

Helaas werkt de app niet op elke website correct (de auteur van de artikelen richtte zich op één bepaalde website). Bijvoorbeeld Gmail en NewRelic, je wordt direct uitgelogd na het inloggen (of na het doen van enkele handelingen). Dat doet me vermoeden dat er een bug in de cookie-opslagimplementatie is die ik nog niet heb kunnen vinden.

Kan iemand me vertellen of ik iets mis?


Antwoord 1, autoriteit 100%

Het probleem is dat er geen cookie-isolatie op JS-niveau is. document.cookie nog steeds verwijzen naar de gedeelde koekjestrommel. Om een ​​echte cookie-geïsoleerde webview te implementeren, moet u de cookie-eigenschap van document overschrijven.

U kunt mijn implementatie proberen:
http://cyyuen.github.io/ADCookieIsolatedWebView

Het werkt voor de site die document.cookie gebruikt om de cookie op te halen, zoals Dropbox.com. De setter is echter niet geïmplementeerd.

Other episodes