Использование независимых экземпляров NSHTTPCookieStorage в одном приложении

Взявшись за написание сетевой программы на Swift, я столкнулся с проблемой того, как расшарить куки между разными экземплярами NSURLSession, чтобы при этом была возможность в разных местах использовать разные хранилища (хранить несколько сессий) Казалось бы, создавай свое хранилище и используй, свойство NSURLSessionConfiguration.HTTPCookieStorage доступно на запись

Но практика показала, что если хранилище создается вручную, оно не рабочее. В консоли нас будет ждать all cookies count: nil

И тут мне пришла идея, а что если в качестве HTTPCookieStorage создавать не свое хранилище а брать такое из ephemeralSessionConfiguration, условиям оно по идее удовлетворяет, каждый NSURLSessionConfiguration полученный через этот метод должен обладать пустым хранилищем кук, причем все эти хранилища будут независимыми друг от друга. И сработало. Если поменять в предыдущем куске кода первую строку на эти

В консоли уже будет отображаться число кук которые мы сохранили после выполнения запроса.

Но есть ложка дёгтя, все это работает только начиная с iOS 9, на 8й как и в первом случае, хранилище кук взятое из ephemeralSessionConfiguration не сохраняет куки вообще, независимо от попыток поменять поведение с помощью HTTPCookieAcceptPolicy.

Вот ссылка на playground, где я рассмотрел 3 случая использования общих хранилищ куков

  1. созданное вручную
  2. взятое из ephemeralSessionConfiguration
  3. взятое из defaultSessionConfiguration

https://github.com/sparklone/CocoaSwiftTips там лежит SharedCookiesStorage.playground

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *