0

Vielleicht ist dies eine dumme Frage, aber ich möchte Cookies für die gleiche URL speichern, aber für Benutzernamen anders. Wie kann dies mit NSHTTPCookieStorage erreicht werden? So speichere ich Cookies aus der Antwort.NSHTTPCookieSpeicher für die gleiche URL, aber verschiedene Benutzer

 NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 

     NSDictionary *headerFields = [httpResponse allHeaderFields]; 


     NSArray* cookies = [NSHTTPCookie 
          cookiesWithResponseHeaderFields:headerFields 
          forURL:[NSURL URLWithString:@""]]; 

     for (NSHTTPCookie *cookie in cookies) { 
      [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie]; 
     } 

     NSString *urlString = ...; 

     [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookies:cookies forURL:[NSURL URLWithString:urlString] mainDocumentURL:nil]; 
+0

Ich würde vorschlagen, ist ein einzelnes Cookie in einem JSON-Format zu speichern. Sie können Sicherheit hinzufügen, wenn Sie die gespeicherten Informationen speichern möchten. –

+0

Also meinst du, ich sollte NSHTTPCookieStorage vermeiden? Wie wäre es, die URL, die mit dem Cookie verknüpft ist, zu erweitern, was schadet Ihnen dabei? –

+0

Es kommt darauf an, dass Sie mehr Verarbeitung benötigen, um die relevanten Daten zu erhalten. Wenn Sie ein JSON-Objekt haben, ist es einfach, es in iOS mit dem JSON-Serialisierungsprozess zu rendern, der die relevanten Daten in NSDictionary konvertiert. Wenn Sie eine URL verwenden, könnte der Speicherplatz nicht ausreichen, da die maximale Anzahl 1024 Zeichen beträgt. –

Antwort

1

Wenn ich Sie richtig verstehe, möchten Sie separate Sätze von Cookies für verschiedene Benutzer haben. Wenn ja, dann sollten Sie:

  1. Erstellen Sie Ihre eigenen Cookie-Speicherklasse (wahrscheinlich nur ein Wörterbuch mit der Basis-URL als Schlüssel und einem Array von Cookies als Wert) und speichern Cookies dort zusätzlich zur Verwendung das Objekt sharedHTTPCookieStorage.

  2. Wenn Sie den Benutzer wechseln, löschen Sie den freigegebenen Cookie-Speicher und kopieren Sie die Cookies aus dem Cookie-Jar des neuen Benutzers (oder entfernen Sie selektiv jeden von diesem Benutzer erstellten Cookie aus dem freigegebenen Jar).

Wenn ich dich falsch verstanden und Sie mögen aus irgendeinem Grunde außerhalb der gemeinsam genutzten Speicher von Cookies ein bestimmtes Cookie speichern:

  1. ein NSURLSession Objekt auf einer Konfiguration mit einem nil Keksdose basierend erstellen (automatischen Cookie-Speicher deaktivieren).

  2. Speichern Sie die Cookies in einem Cookie-Glas, wie Sie es oben tun (das kann die gemeinsame Keksdose sein oder nicht), aber lassen Sie diejenigen, die Sie nicht speichern möchten.

  3. Schreiben Sie eine Methode, um die Cookies aus diesem Cookie-Jar zu einem NSURLRequest-Objekt hinzuzufügen.

  4. Denken Sie immer daran, diese Methode für Ihre URL-Anforderungsobjekte aufzurufen, bevor Sie Aufgaben mit ihnen erstellen.

Dies alles natürlich NSURLSession vorausgesetzt. Ich glaube nicht, dass es eine Möglichkeit gibt, den Cookie-Speicher mit NSURLConnection zu kontrollieren. Alle Cookies werden in der Keksdose, Periode, AFAIK gespeichert.

+0

Ich denke, es ist in Ordnung, separate NSHTTPCookieStorage für jeden Benutzer zu erstellen und SharedCookieStorage dann mit dem entsprechenden Benutzer auszutauschen. –

+0

Aber wie erstelle ich ein separates NSHTTPCookieStorage? Ich denke, dass alle API erlaubt sind, auf sharedHTTPCookieStorage zuzugreifen. –

+0

'' [[NSHTTPCookieStorage Alloc] init] '' – dgatwood