9

我创建了一个非常基本的应用程序,其中包括SFSafariViewController指向 URL http://www.w3schools.com/js/js_cookies.asp。这是一个用于读取和写入 cookie 的测试网站。

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

为了正确写入和读取 cookie,我需要在应用程序之间做些什么吗?

4

3 回答 3

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]  
}

希望这可以帮助,

利亚姆

于 2016-04-05T09:56:37.503 回答
4

Apple 开发论坛上的一位用户建议它可能仅适用于“持久性 cookie”而不适用于“会话 cookie”。我没有在我的 cookie 上设置有效期。我通过未来的时间改变了这一点:

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

然后将其设置在标题中:

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

现在 cookie 值出现在 SFSafariViewController 中。

于 2016-07-29T20:23:19.460 回答
2

正如苹果的文件所说:

SFSafariViewController 类提供浏览网页的标准接口。视图控制器包括 Safari 功能,例如阅读器、自动填充、欺诈性网站检测和内容阻止。它与 Safari 共享 cookie 和其他网站数据。用户的活动和与 SFSafariViewController 的交互对您的应用程序不可见,它无法访问自动填充数据、浏览历史记录或网站数据。您不需要保护您的应用程序和 Safari 之间的数据。

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

于 2016-04-04T16:12:59.797 回答