Jarre à cookies séparée par WebView sous OS X

J’ai essayé d’atteindre l’objective d’avoir un cookie unique (non partagé) par WebView dans macOS (la gestion des cookies fonctionne différemment pour iOS).

Après avoir lu beaucoup de questions sur StackOverflow et parcouru les documents, j’ai trouvé la solution la plus proche de mon problème dans ces articles:

  • http://cutecoder.org/programming/implementing-cookie-storage/ (comment gérer les cookies HTTP)
  • http://cutecoder.org/programming/handling-cookies-javascript-custom-jar/ (comment gérer les cookies JavaScript document.cookie)

J’ai mis en place un exemple d’application en les utilisant: https://github.com/jjconti/swift-webview-isolated

L’idée de base est d’implémenter les méthodes nécessaires à partir des protocoles WebResourceLoadDelegate et WebPolicyDelegate et d’utiliser BSHTTPCookieStorage pour stocker et récupérer les cookies. En outre, mon exemple d’application permet de sauvegarder l’object cookieStorage afin qu’il puisse être rechargé lors d’exécutions futures.

Malheureusement, l’application ne fonctionne pas correctement sur chaque site Web (l’auteur des articles visait un site Web particulier). Par exemple, Gmail et NewRelic, vous êtes immédiatement déconnecté après la connexion (ou après avoir effectué certaines actions). Cela me fait suspecter un bogue dans l’implémentation de stockage de cookies que je n’ai pas encore pu trouver.

Quelqu’un pourrait-il me dire s’il y a quelque chose qui me manque?

Le problème est qu’il n’y a pas d’isolement de cookie au niveau JS. document.cookie pointe toujours vers le cookie partagé. Pour implémenter une véritable vue Web isolée par cookie, vous devez remplacer la propriété cookie du document.

Vous pouvez essayer mon implémentation: http://cyyuen.github.io/ADCookieIsolatedWebView

Cela fonctionne pour le site en utilisant document.cookie pour obtenir le cookie tel que Dropbox.com. Cependant, le setter n’est pas implémenté.