Ich entwickle eine Anwendung, wo der Server mir einen Cookie übergibt, um den Benutzer zu identifizieren.Gemeinsame Instanz von NSHTTPCookieStorage speichert keine Cookies
Meine aufeinanderfolgenden Anforderungen müssen diesen Cookie haben, um die Antwort zu haben, die der Benutzer erwartet. Was ich nicht verstehen kann ist, wie und wann die gemeinsame Instanz von NSHTTPCookieStorage seine Cookies verliert.
Die erste Lösung, die ich verwendet habe, ist zu archivieren und speichern Sie die Cookies von meinem Server auf Benutzer Standardeinstellungen für Anwendungen, dann löschen Sie vorhandene von meinem Server beim Start der Anwendung und setzen Sie die, die ich gespeichert habe. Durch den Entwicklungsprozess hatte ich keine Probleme, da die Sitzungen zum Debuggen sehr kurz sind und die App normalerweise nicht in den Hintergrund stellen musste.
Während der Beta-Tests begannen die Probleme. Der Hack, mit dem ich kam, ist, die Cookies nicht nur bei der Beendigung der Anwendung zu speichern, sondern auch nach den API-Calls, die mir diese Cookies zurückgeben. Und um die gespeicherten Cookies nicht nur beim Start der App zu laden, sondern auch, wenn die App in den Vordergrund zurückkehrt.
Wie wird die NSHTTPCookieStorage Freigabe Instanz diese Cookies loswerden und was ist die beste Praxis, um damit umzugehen, wie es ein wichtiger Teil meiner App ist und ich kann nicht so eine gehackte Lösung vertrauen, wenn nicht von erfahrenen Entwicklern gesichert .
Vielen Dank im Voraus für Ihre Antworten
EDIT: Hier sind die Methoden/speichern cookies
-(void)saveStoredCookies
{
NSURL *httpUrl = @"http://myServer.com";
NSURL *httpsUrl = @"https://myServer.com";
NSArray *httpCookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpUrl];
NSData *httpCookiesData = [NSKeyedArchiver archivedDataWithRootObject:httpCookies];
[[NSUserDefaults standardUserDefaults] setObject:httpCookiesData forKey:@"savedHttpCookies"];
NSArray *httpsCookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpsUrl];
NSData *httpsCookiesData = [NSKeyedArchiver archivedDataWithRootObject:httpsCookies];
[[NSUserDefaults standardUserDefaults] setObject:httpsCookiesData forKey:@"savedHttpsCookies"];
[[NSUserDefaults standardUserDefaults] synchronize];
}
-(void)readStoredCookies
{
//clear, read and install stored cookies
NSURL *httpUrl = @"http://myServer.com";
NSURL *httpsUrl = @"https://myServer.com";
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpUrl];
for (NSHTTPCookie *cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpsUrl];
for (NSHTTPCookie *cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
NSData *httpCookiesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"savedHttpCookies"];
if([httpCookiesData length]) {
NSArray *savedCookies = [NSKeyedUnarchiver unarchiveObjectWithData:httpCookiesData];
for (NSHTTPCookie *cookie in savedCookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
}
}
NSData *httpsCookiesData = [[NSUserDefaults standardUserDefaults] objectForKey:@"savedHttpsCookies"];
if([httpsCookiesData length]) {
NSArray *savedCookies = [NSKeyedUnarchiver unarchiveObjectWithData:httpsCookiesData];
for (NSHTTPCookie *cookie in savedCookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookie:cookie];
}
}
}
-(void)clearStoredCookies
{
NSURL *httpUrl = @"http://myServer.com";
NSURL *httpsUrl = @"https://myServer.com";
NSArray *cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpUrl];
for (NSHTTPCookie *cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
cookies = [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookiesForURL:httpsUrl];
for (NSHTTPCookie *cookie in cookies) {
[[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
}
}
Bitte aktualisieren Sie mit dem Code, den Sie verwenden, um die Cookies nach einer neuen Anfrage aus dem Cookie-Speicher zu entfernen. Ihre Beschreibung ist nicht ausreichend. –
Sie haben kein Problem festgestellt, weil Sie die Cookies während des Tests zwischen den neuen Sitzungen nicht aus dem Speicher geladen haben. –