【问题标题】:How can an iOS native app like Vimeo set cookies to mobile Safari?像 Vimeo 这样的 iOS 原生应用程序如何将 cookie 设置为移动 Safari?
【发布时间】:2012-09-14 13:49:52
【问题描述】:

我发现 Vimeo iOS 原生应用可以为移动 Safari 设置 cookie。它是怎么做的?

回购步骤:

1、在 iOS 设备上安装 Vimeo iOS 原生应用。

2、打开这个 Vimeo iOS 原生应用,然后用你的 Vimeo 账号登录。

3、打开手机Safari,然后打开网页“https://vimeo.com/”。您发现您没有登录 Vimeo。

4、打开Vimeo iOS原生应用,然后点击左侧导航栏中的“帮助(问号)”图标。你会看到 Vimeo 的网页帮助中心是通过 UIWebView 打开的。然后你就可以关闭这个帮助中心了。

5、打开手机Safari,然后打开网页“https://vimeo.com/”。您发现您已登录 Vimeo。

谢谢。

【问题讨论】:

    标签: iphone ios ipad mobile-safari privacy


    【解决方案1】:

    this question所示,可以使用NSHTTPCookieStorage类设置cookie。

    编辑:
    正如 Kitsune 指出的那样,文档指出,这在 iOS 中的应用程序之间不会像在 OSX 中那样工作。

    我现在没有时间对此进行测试,但也许您可以使用 javascript 和 UIWebViewstringByEvaluatingJavaScriptFromString 方法设置一个 cookie,它会被共享吗?这是我在互联网上找到的一个可以调用的函数:

    function SetCookie(cookieName,cookieValue,nDays) {
     var today = new Date();
     var expire = new Date();
     if (nDays==null || nDays==0) nDays=1;
     expire.setTime(today.getTime() + 3600000*24*nDays);
     document.cookie = cookieName+"="+escape(cookieValue)
                     + ";expires="+expire.toGMTString();
    }
    

    【讨论】:

    • 根据NSHTTPCookieStorage 的文档:iOS 注意:Cookie 不会在 iOS 中的应用程序之间共享。
    • @Kitsune Cookie 不会在 iOS 中的应用程序之间共享。 iOS 原生应用可以将 Cookie 设置为移动 Safari。但本机应用程序无法在移动 Safari 中获取或删除 cookie。 对吗?
    • @weilou 除非文档的那部分措辞不佳(并非不可能),否则所有应用程序都应完全隔离,包括在 Safari 中设置 cookie,当使用该 API 时(否则 Safari 会自动包含所有 cookie在任何应用程序中使用 sharedStorage 设置)。话虽如此,我不知道 Vimeo 是如何做到你所描述的......可能还有其他一些电话会有所帮助(甚至可能是他们漏掉的私人电话!)完成它。
    • @Kitsune 非常感谢您的回复!
    【解决方案2】:

    vimeo 的本机应用程序可能通过查询字符串将某种登录令牌传递到帮助页面,这可能会在设置 cookie 后立即将您重定向到 URL 中没有登录令牌的页面。由于cookie是web服务器给UIWebView(Safari)设置的,所以在你使用Safari app的时候就可以找到。

    这不需要 iOS 中的支持 API...

    【讨论】:

      【解决方案3】:

      这显然不适用于 OP 的问题,但最近 cookie 在 iOS 9 和 10 中的 Safari 和 SFSafariViewController 实例之间共享。Vimeo 可以通过不可见的 SFSafariViewController 设置一个 cookie达到这个结果。但是,这在 iOS 11 中发生了变化。展望未来,每个应用程序(包括 Safari 本身)都将拥有一个完全沙盒化的数据存储。官方公告here(17:28分)。

      在 iOS 11 中,这样的行为将不再可能(事实上,阻止它是 Apple 关于此更改的公告中的特色示例)。

      如果您需要一种方法将有保证的用户匹配从 Safari 传递到您的应用,则需要使用现有的设备匹配网络,例如 Branch.io(完全披露:我在 Branch 团队)。您可以阅读有关 Branch 使用的技术来代替 cookie passthrough here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多