一次“有意思”的cookie同步问题

最近的项目开发中,遇到了一个有趣的问题:金融项目需要接入第三方的SDK进行资金托管,比如充值,提现,投资等。当从第三方的界面回到原生APP界面时,神奇的事情发生了。原本存储在NSHTTPCookieStorage中的cookic却被清空了。项目是依靠cookie验证用户登录状态,这下出大事了:用户莫名其妙的退出登录了。

一,NSHTTPCookieStorage

/*!
  @property sharedHTTPCookieStorage
  @abstract获取默认位置的共享cookie存储。
  @result共享的cookie存储
  @discussion从OS X 10.11开始,每个应用程序都有自己的sharedHTTPCookieStorage单例,
  这将不会与其他应用程序共享。
*/
@property(class, readonly, strong) NSHTTPCookieStorage *sharedHTTPCookieStorage;
当我们使用该类的时候,是通过上面这个属性方法获取到该单例对象的。至于为什么会采用单例模式,是因为该类的用途就是“共享的cookie存储”。
/*!
   @abstract获取所有的cookies
   @result一个NSArray的NSHTTPCookies
*/
@property (nullable , readonly, copy) NSArray *cookies;
/*!
   @method setCookie:
   @abstract设置一个cookie
   @discussion该cookie将覆盖现有的cookie与相同的名称,域名和路径,如果有的话。
*/
- (void)setCookie:(NSHTTPCookie *)cookie;
/*!
   @method deleteCookie:
   @abstract删除指定的cookie
*/
- (void)deleteCookie:(NSHTTPCookie *)cookie;
/*!
   @method removeCookiesSince:
   @abstract从提供的日期起,删除cookie存储中的所有cookie。
 */
- (void)removeCookiesSinceDate:(NSDate *)date
/*!
   @method cookiesForURL:
   @abstract返回要发送到给定URL的cookie数组。
   @param URL获取cookie的URL。
   @result一个NSArray的NSHTTPCookie对象。
   @discussion Cookie管理器检查它存储的cookie包括那些应该被发送到给定的URL。 您可以使用 + [NSCookie requestHeaderFieldsWithCookies:] 来打开这个数组成一组头字段添加到请求。
*/
- (nullable NSArray *)cookiesForURL:(NSURL *)URL;
/*!
   @method setCookies:forURL:mainDocumentURL:
   @abstract将一个数组的cookie添加到cookie存储中
   Cookie接受政策。
   @param cookies要设置的cookie。
   @参数URL发送cookie的URL。
   @param mainDocumentURL要用作“相同”的基础的主文档URL域名为主要文件“政策。
   @discussion对于mainDocumentURL,调用者应该传递URL一个适当的主文档,如果知道的话。 
  例如,加载时一个网页,顶层的主html文档的URL框架应该通过。 
  根据一组响应保存cookie头,你可以使用 + [NSCookie
cookiesWithResponseHeaderFields:forURL:] 标题字段字典,然后使用此方法来存储结果的cookie 按照政策设置。
*/
- (void)setCookies:(NSArray *)cookies forURL:(nullable NSURL *)URL mainDocumentURL:(nullable NSURL *)mainDocumentURL;