为什么SFSafariWebViewController没有正确地与Safari共享cookie?

时间:2016-03-24 15:13:32

标签: ios cookies ios9 mobile-safari sfsafariviewcontroller

我创建了一个令人难以置信的基本应用,其中包含指向网址http://www.w3schools.com/js/js_cookies.aspSFSafariViewController。这是一个用于读写cookie的测试网站。

然后我将同一个网站加载到Mobile Safari中,并添加了一个cookie。我切换到我的应用程序,阅读cookie,它就在那里。我回到Safari,添加另一个cookie,回到我的应用程序,但第二个cookie没有出现。我刷新页面,没有区别。回到Safari并阅读cookies,它们都被成功读取。

我是否需要在应用程序之间进行任何操作才能正确编写和读取cookie?

3 个答案:

答案 0 :(得分:4)

您可以强制SFSarfariViewController在应用关闭时解散。这样可以确保网页与任何新Cookie一起刷新。

在ViewDidLoad中:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(shouldDismiss:) name:UIApplicationDidEnterBackgroundNotification object:nil];

然后:

- (void)shouldDismiss:(NSNotification*)notification {

    [self.safariViewContollerName dismissViewControllerAnimated:YES completion:nil]  
}

希望这有帮助,

利安

答案 1 :(得分:4)

Apple Dev Forums上的用户建议它可能仅适用于"持久性Cookie"不是"会话cookie"。我没有在我的cookies上设置到期日。我通过以后的时间改变了这一点:

const expireTime = new Date(Date.now() + 1000 * 60 * 60 * 24).toGMTString();

然后在标题中设置它:

"Set-Cookie":`query=${uri.query}; path=/; expires=${expireTime}`

现在,cookie值出现在SFSafariViewController中。

答案 2 :(得分:2)

正如Apple的文件所说:

  

SFSafariViewController类提供用于浏览Web的标准界面。视图控制器包括Safari功能,如Reader,AutoFill,Fraudulent Website Detection和内容阻止。它与Safari共享cookie和其他网站数据。用户的活动和与SFSafariViewController的交互对您的应用程序不可见,该应用程序无法访问自动填充数据,浏览历史记录或网站数据。您无需在应用和Safari之间保护数据。

默认情况下,它与Safari共享Cookie和其他网站数据。你不必做任何事情。