SFSafariViewController cookie

Jai*_*ron 7 cookies safari ios nshttpcookiestorage sfsafariviewcontroller

据我所知,从iOS9开始,您应该能够使用SFSafariViewController读取cookie.

如果我使用以下内容在JS中的页面上设置cookie:

var dd = new Date(Date.now() + 1000 * 60 * 60 * 24).toGMTString();
var expires = "expires="+ dd;
document.cookie = "mycookie=cookievalue; " + expires  + " domain=.mydomain.co.uk ; path=/ ";
Run Code Online (Sandbox Code Playgroud)

如果我做 :

- (void)safariViewController:(SFSafariViewController *)controller didCompleteInitialLoad:(BOOL)didLoadSuccessfully
{
  NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
  NSArray *cookiesArray = [storage cookies];
}
Run Code Online (Sandbox Code Playgroud)

cookiesArray总是空的.

如果我使用传统的UIWebView

-(void)webViewDidFinishLoad:(UIWebView *)webView
{
  NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
  NSArray *cookiesArray = [storage cookies];
}
Run Code Online (Sandbox Code Playgroud)

我得到了我期待的cookie.

我有什么想法可能做错了吗?

wot*_*tle 10

SFSafariViewController基本上是一个Safari进程,在你的应用程序之外运行.您的应用程序将无权访问您使用的cookie SFSafariViewController,就像您的应用程序无法访问Safari应用程序本身中的cookie一样.

如果您需要此功能,则需要坚持使用UIWebViewWKWebView.

  • 您误解了 SFSafariViewController“与 Safari 共享 cookie 和其他网站数据”的含义。SFSafariViewController 是 Safari 的一个实例。它不是您的应用程序的一部分。它正在访问 Safari 数据沙箱(cookie、自动填充等),而不是您的应用程序与 Safari 共享该数据。您的应用无法访问 Safari 中的任何安全数据,包括 cookie。如果您需要在应用程序中访问网站 cookie,SFSafariViewController 不是正确的选择。 (2认同)