我创建了一个令人难以置信的基本应用,其中包含指向网址http://www.w3schools.com/js/js_cookies.asp的SFSafariViewController
。这是一个用于读写cookie的测试网站。
然后我将同一个网站加载到Mobile Safari中,并添加了一个cookie。我切换到我的应用程序,阅读cookie,它就在那里。我回到Safari,添加另一个cookie,回到我的应用程序,但第二个cookie没有出现。我刷新页面,没有区别。回到Safari并阅读cookies,它们都被成功读取。
我是否需要在应用程序之间进行任何操作才能正确编写和读取cookie?
答案 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和其他网站数据。你不必做任何事情。