【发布时间】:2017-06-02 16:51:57
【问题描述】:
是否可以在 iPhone 应用程序中设置一个持续存在的 cookie,以便稍后当用户在 Mobile Safari 中时,该 cookie 可以发送到网络服务器?
【问题讨论】:
标签: iphone
是否可以在 iPhone 应用程序中设置一个持续存在的 cookie,以便稍后当用户在 Mobile Safari 中时,该 cookie 可以发送到网络服务器?
【问题讨论】:
标签: iphone
** 2017 年更新 **
自从第一次回答这个问题以来,近年来 iOS 对安全机制和跨应用通信进行了很多更改。
以下代码不再适用于当前的 iOS 版本,因为 Safari 不再接受 URL 中的 javascript:...,而像 NSURL 这样的框架捕获这些并返回 nil。
仍然有效的一种替代方法是托管一个网站并让 Safari 打开它,或者在您的应用程序中集成这样一个 HTML 页面并运行一个小型 http 服务器来按需托管它。
**iOS 最高 6.x **
由于 Apple 已在所有应用商店应用程序上强制沙盒
目前没有简单的方法来实现您的要求。
但是,您可以从包含 javascript 的应用程序中打开一个特殊的 http://-URL 来放置 cookie:
NSString jsURL = @"javascript:function someFunction(){ /* your javascript code here */ } someFunction();void(0)";
[[UIApplication sharedApplication] openURL:[NSURL URLWithString: jsURL]];
在 URL 中使用 javascript 已被不同的 iPhone 应用程序用于交叉通信
使用 MobileSafari(例如 instapaper)。
另一种选择是在您的应用程序或服务器上包含一个静态 HTML 页面,并指示 MobileSafari 打开它。
该页面反过来可以设置永久 cookie。
希望这会有所帮助!
【讨论】:
我相信使用 ASIHTTPRequest 库可以轻松实现这一点。它封装了全局cookie存储的使用。
http://allseeing-i.com/ASIHTTPRequest/How-to-use
您可以使用此库发出请求,该库会累积 cookie,然后这些 cookie 会影响以后的其他请求。
在我的 iPhone 应用程序中访问经过身份验证的 API 时,我使用它非常有效。
【讨论】:
documentation for NSCookieStorage 表明它将是这样一种机制。但是“所有应用程序”是否真的包括 Mobile Safari,您必须通过实验来确定......
另请参阅URL Loading System 的一般文档。
【讨论】:
我是 iPhone 开发的新手,但不会打开 UIWebView 允许您的服务器在浏览器上设置 cookie,这样当用户使用 Safari 访问该站点时,您的网络服务器可以读取 cookie?也许是隐藏的或小的 UIWebView?我无法从您的问题中看出用例是什么。
【讨论】: