0

Может быть, это глупый вопрос, но я хочу хранить файлы cookie для одного и того же URL-адреса, но разные для имен пользователей. Как это можно сделать с помощью NSHTTPCookieStorage? Вот как я храню файлы cookie от ответа.NSHTTPCookieStorage за тот же URL-адрес, но разные пользователи

 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

Я предлагаю хранить один файл cookie в формате JSON. Вы можете добавить безопасность, если хотите сохранить сохраненную информацию. –

+0

Значит, вы должны избегать NSHTTPCookieStorage? Как насчет расширения URL-адреса, связанного с файлом cookie, какого-либо вреда в этом? –

+0

Это зависит от того, что вам нужно больше обработки, чтобы получить от него соответствующие данные. Если у вас есть объект JSON, его легко отобразить в iOS, используя процесс сериализации JSON, который преобразует соответствующие данные в NSDictionary. если вы используете URL-адрес, это может закончиться вне пространства, так как максимальный размер которого составляет 1024 символа. –

ответ

1

Если я правильно вас понимаю, вы хотите иметь отдельные наборы файлов cookie для разных пользователей. Если это так, то вам необходимо:

  1. Создайте свой собственный класс для хранения пользовательских куков (возможно только словарь с базовой URL в качестве ключа и массивом печенья в качестве значения) и хранить печенье там в дополнении к использованию объект sharedHTTPCookieStorage.

  2. Когда вы меняете пользователей, протрите общее хранилище файлов cookie и скопируйте файлы cookie из банка cookie нового пользователя (или выборочно удалите каждый cookie, созданный этим пользователем из общей банки).

Если я неправильно понял вас, и вы хотите сохранить один конкретный печенье за ​​пределами общего хранилища печенья по некоторым причинам:

  1. Создать объект NSURLSession, основанный на конфигурации с нулевым куков (отключение автоматического хранения файлов cookie).

  2. Храните куки в кувшин для печенья, как вы делаете выше (что может быть или не быть общим кувшином для печенья), но не оставляйте те, которые вы хотите избежать.

  3. Напишите способ добавления файлов cookie из этой банки cookie в объект NSURLRequest.

  4. Не забудьте вызвать этот метод в объектах запроса URL, прежде чем создавать с ними задачи.

Это все предполагает NSURLSession, конечно. Я не думаю, что есть способ контролировать хранилище файлов cookie с помощью NSURLConnection. Все файлы cookie хранятся в банке cookie, периоде, AFAIK.

+0

Я думаю, что нормально создавать отдельный NSHTTPCookieStorage для каждого пользователя, а затем обменивать sharedCookieStorage с соответствующим пользователем. –

+0

Но как создать отдельный NSHTTPCookieStorage? Я думаю, что все API позволяет получить доступ к sharedHTTPCookieStorage. –

+0

'' [[NSHTTPCookieStorage alloc] init] '' – dgatwood