【问题标题】:Setting a cookie in an iPhone App在 iPhone 应用程序中设置 cookie
【发布时间】:2017-06-02 16:51:57
【问题描述】:

是否可以在 iPhone 应用程序中设置一个持续存在的 cookie,以便稍后当用户在 Mobile Safari 中时,该 cookie 可以发送到网络服务器?

【问题讨论】:

标签: iphone


【解决方案1】:

** 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。

希望这会有所帮助!

【讨论】:

  • 试过了,好像不行。 [NSURL URLWithString:@"javascript:function someFunction(){ alert('test!'); } someFunction();void(0)"] 返回 nil。
  • 使用 iOS Safari.app 你不能(没有越狱和 file:// 支持)。
  • javascript:// 方案似乎不起作用,至少对于 iOS5/6 而言
  • 我想指出,这个答案已有两年之久,可能不适用于当前的 iOS 版本。事实上,带有 'javascript:function()' 的书签仍然有效
  • @ikarius - 我的回答中没有提到“javascript://”方案的地方 - 它是“javascript:function someFunction(){...}” - 这必须是使用方式如上图所示
【解决方案2】:

我相信使用 ASIHTTPRequest 库可以轻松实现这一点。它封装了全局cookie存储的使用。

http://allseeing-i.com/ASIHTTPRequest/How-to-use

您可以使用此库发出请求,该库会累积 cookie,然后这些 cookie 会影响以后的其他请求。

在我的 iPhone 应用程序中访问经过身份验证的 API 时,我使用它非常有效。

【讨论】:

    【解决方案3】:

    documentation for NSCookieStorage 表明它将是这样一种机制。但是“所有应用程序”是否真的包括 Mobile Safari,您必须通过实验来确定......

    另请参阅URL Loading System 的一般文档。

    【讨论】:

    • 根据我的快速实验,我使用 NSCookieStorage 保存的 cookie 只能由创建它们的应用程序读取。我不确定我是否做错了什么,或者文档中的那段内容是否具有误导性。
    • 我承认我从未在自己的应用程序中真正使用过它,但我确实在网络上看到了似乎表明其他人已经成功使用它的 cmets。很遗憾听到它对您不起作用。 :-(
    【解决方案4】:

    我是 iPhone 开发的新手,但不会打开 UIWebView 允许您的服务器在浏览器上设置 cookie,这样当用户使用 Safari 访问该站点时,您的网络服务器可以读取 cookie?也许是隐藏的或小的 UIWebView?我无法从您的问题中看出用例是什么。

    【讨论】:

    • UIWebViews 被沙盒化,并使用与 Mobile Safari 不同的 cookie 存储
    猜你喜欢
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-10
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多