2010-03-26 9 views
12

Vielleicht vermisse ich etwas, aber von Apple's documentation für NSHTTPCookieStorage kann ich nicht helfen, aber frage mich, wie das sicher ist zu verwenden.Understanding NSHTTPCookieStorage für das iPhone

Bedeutet dies, dass der Cookie-Speicher für alle Apps auf dem iPhone freigegeben ist? Wenn meine App einen HTTP-Anruf tätigt, bei dem einige Cookies gespeichert werden, haben nun alle Apps Zugriff auf diese Cookies?

Methoden wie:

cookiesForURL: Gibt alle Empfängers Cookies, die an eine angegebene URL gesendet.

machen es noch verdächtiger aussehen.

Kann jemand erklären, wie das in Ordnung ist und was die Klasse tut?

Auch unter der Annahme, dass mein Verständnis ist fehlerhaft und das ist in der Tat sandboxed per-app, Anrufe mit NSURLRequest automatisch speichern/abrufen Cookies aus diesem Speicher oder ist es die Entwickler Verantwortung, Anfrage Header vor dem Senden der Anfrage zu setzen?

+0

FYI: Ich habe dies getestet und es scheint, als wäre es sandboxed zu Ihrer App. Wenn Sie also eine Website in einem UIWebView von Ihrer App aus aufrufen, stehen Ihnen die vom Browser gesetzten Cookies zur Verfügung. Aber nicht die von anderen Apps. Ich werde einen Dokumentationsfehler für Apple – psychotik

+0

protokollieren Apple scheint die Dokumentation aktualisiert zu haben, jetzt, dass auf iOS-Cookies nicht unter den Anwendungen freigegeben sind. –

Antwort

20

Ihre Anwendung hat nur Zugriff auf Cookies in ihrer eigenen Sandbox.

+0

Danke. Kannst du eine Quelle/Dokumentation angeben? Oder kennen Sie das aus Erfahrung? So interpretiere ich die Dokumentation, die ich oben verlinkt habe, nicht. Ich wollte mehr erfahren. – psychotik

+0

So weit ich das beurteilen kann, kann ich nur auf nicht abgelaufene Cookies zugreifen, die von meiner eigenen Anwendung erstellt wurden. Ich kann nicht auf Cookies zugreifen, die beispielsweise von Mobile Safari erstellt wurden. Allerdings habe ich dies nicht zu streng getestet, und es sieht so aus, als ob die von Ihnen zitierte Dokumentation meiner Erfahrung widerspricht. Ich würde das selbst testen: Verwenden Sie Safari mit Webseiten, die Cookies ausstellen, dann durchlaufen Sie in Ihrer eigenen App die Cookies in der Singleton-Keksdose und sehen Sie, was Sie finden. Wenn Sie keine Safari-Cookies sehen, würde das der Dokumentation widersprechen - zu diesem Zeitpunkt wäre vielleicht ein Bericht an http://bugreport.apple.com wert. –

+1

Ja, ich habe das getestet und es scheint, als wäre es in Ihrer App Sandboxed. Wenn Sie also eine Website in einem UIWebView von Ihrer App aus aufrufen, stehen Ihnen die vom Browser gesetzten Cookies zur Verfügung. Aber nicht die von anderen Apps. Ich werde einen doc-Fehler für Apple protokollieren. – psychotik

3

Ich denke, Sie sind verwirrt durch die Tatsache, dass Sie auf Cookies von anderen Domänen/URLs zugreifen können. Das ist technisch wahr, weil Ihre native App "ein Browser" ist, wenn Sie UIWebView verwenden. Wenn Sie www.siteA.com und www.siteB.com in Ihrem UIWebView laden, sind beide Domain-Cookies für Ihren objc-Code verfügbar. Alle Apps, einschließlich der mobilen Safari, haben ihr eigenes CookieJar und keiner von ihnen kann auf das andere zugreifen.

+1

Ich verstehe nicht, warum meine Antwort ein negatives Feedback hat :) cookiesForURL ist genau das, um Cookies für eine bestimmte URL zu erhalten. Diese URL könnte eine beliebige von Ihnen erwähnte URL sein. Der Dreh ist, gibt es nur die Kekse in Ihrem Keksdose zurück. Wenn Sie den Nutzer in Ihrer App zu facebook.com navigieren lassen, haben Sie Zugriff auf die Cookies von facebook.com. –