SFSafariViewController cookies
SFSafariViewController cookies
我了解到,从 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=/ ";
如果我这样做:
- (void)safariViewController:(SFSafariViewController *)controller didCompleteInitialLoad:(BOOL)didLoadSuccessfully
{
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookiesArray = [storage cookies];
}
cookiesArray 始终为空。
如果我使用传统的 UIWebView
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookiesArray = [storage cookies];
}
我得到了我期待的 cookie。
知道我做错了什么吗?
SFSafariViewController
基本上是一个 Safari 进程,运行 在您的应用之外。您的应用将无权访问 SFSafariViewController
使用的 cookie,就像您的应用无权访问 Safari 应用本身中的 cookie 一样。
如果您需要此功能,则需要坚持使用 UIWebView
或 WKWebView
。
我了解到,从 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=/ ";
如果我这样做:
- (void)safariViewController:(SFSafariViewController *)controller didCompleteInitialLoad:(BOOL)didLoadSuccessfully
{
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookiesArray = [storage cookies];
}
cookiesArray 始终为空。
如果我使用传统的 UIWebView
-(void)webViewDidFinishLoad:(UIWebView *)webView
{
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
NSArray *cookiesArray = [storage cookies];
}
我得到了我期待的 cookie。
知道我做错了什么吗?
SFSafariViewController
基本上是一个 Safari 进程,运行 在您的应用之外。您的应用将无权访问 SFSafariViewController
使用的 cookie,就像您的应用无权访问 Safari 应用本身中的 cookie 一样。
如果您需要此功能,则需要坚持使用 UIWebView
或 WKWebView
。