2008-12-12 2 views

Antwort

17

Die grundlegende Antwort ist "Sie können nicht".

Nach einem Blick auf dieses Thema, ich denke, es ist möglich, aber sehr kompliziert. Dies würde die Implementierung eines resourceLoadDelegate in Ihrem WebView beinhalten, das -webView:resource:willSendRequest:redirectResponse:fromDataSource: implementiert und die Anforderung zum Ausschalten von HTTPShouldHandleCookies modifiziert und alle relevanten Cookies manuell zur Anfrage hinzufügt. Es muss auch -webView:resource:didReceiveResponse:fromDataSource: implementieren, um herauszufinden, ob Cookies vom Server zurückgegeben werden. Sie können Ihre eigene Kopie von NSHTTPCookieStorage per-webview zuweisen/initiieren und diese zum Speichern/Abrufen der Cookies verwenden.

+0

Heh. Das ist erstaunlich. Am Ende änderte ich den Webservice, um die Probleme, die ich hatte, zu beheben. Ich würde erwarten, dass dies ziemlich häufig vorkommt (privater Modus, Multi-User-Test, etc ...). Danke, dass du dir das angeschaut hast. – Dustin

+14

Ich habe tatsächlich eine WebView-Unterklasse implementiert, die das mithilfe der in dieser Antwort beschriebenen Methode durchführt. http://igisolatedcookiewebview.googlecode.com/ (Neue BSD-Lizenz). – Isaac

+0

@Isaac Wow, absolut perfekt für das, was ich brauche. Ein Problem, das mir aufgefallen ist, ist in Zeile 152 der .m-Datei (Initialisierung des cookieStore-Arrays). Wenn Sie ARC verwenden und den Retain-Aufruf entfernen, stürzt es ab. Ich musste nur-fno-objc-arc für diese Datei verwenden. – sudo

0

Ich würde annehmen, dass Cookies auf einer Service-/Anwendungsebene und nicht für bestimmte Instanzen oder Prozesse konfiguriert werden. Vielleicht könnten Sie Ihre Frage überarbeiten, um einen Weg zu finden, das Problem zu lösen, bei dem die Instanzen keine Cookies freigeben müssen.

Was ist die Motivation, keine Cookies zwischen den Instanzen zu teilen?

Wenn Sie nur 3 Ansichten in derselben Webressource benötigen, können Sie einige virtuelle Hosts einrichten, die auf dieselbe Datenquelle verweisen.

+0

WebView ist die Browseransicht von webkit. Ich habe tatsächlich zwei Fenster, die dieselbe Webseite betrachten, und ich möchte, dass sie nicht dieselbe Sitzung verwenden. – Dustin

3

This post fasst zusammen, was Sie tun könnten. Ich bin nicht sicher, ob es für Sie machbar ist und ich denke, es wäre keine einfache Aufgabe, vielleicht sogar riskant, aber es scheint möglich zu sein: der Autor behauptet, iCab macht es so.

Ich hoffte auch auf eine einfachere Lösung, wirklich. Natürlich, da Webkit Open Source ist, könnten Sie einfach Ihre eigene Version des Frameworks mit geändertem Verhalten einführen.

0

Was Sie tun können, ist ein Blick auf libcurl, die Cookie-Shops, die nicht mit dem URL Loading System Wide Cookie-Speicher für die Anforderungen, die Sie trennen möchten, umgehen können. Für mich scheint das eine gültige und einfache Lösung zu sein. Wenn Sie wirklich auf Webview/Webkit angewiesen sind, ist es möglicherweise nicht.

+0

Ja, das webvivew Zeug war ziemlich wichtig für mich. Ich könnte es wahrscheinlich immer noch schaffen, aber ich wollte vermeiden, die Welt neu zu schreiben. Am Ende habe ich den Server gewechselt. *Seufzer* – Dustin

Verwandte Themen