10

我发现 Vimeo iOS 本机应用程序可以将 cookie 设置为移动 Safari。它是怎么做的?

回购步骤:

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。

谢谢你。

4

3 回答 3

5

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

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

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

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();
}
于 2013-01-13T05:47:28.653 回答
3

It's possible that vimeo's native app is passing some kind of sign in token through the query string to the help page, which could immediately redirect you to a page with no signin token in the URL any more after setting a cookie. Since the cookie is set by the web server to the UIWebView (Safari), it's found when you use the Safari app.

That wouldn't require a supporting API in iOS...

于 2013-01-13T06:03:18.690 回答
1

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

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

如果您需要一种方法将有保证的用户匹配从 Safari 传递到您的应用程序,您将需要使用现有的设备匹配网络,例如Branch.io(完全披露:我在 Branch 团队中)。您可以在此处阅读有关 Branch 使用的技术而不是 cookie passthrough 的信息。

于 2017-06-08T19:07:41.433 回答