Facebook iOS SDK 不存储用于访问的 cookie

Posted

技术标签:

【中文标题】Facebook iOS SDK 不存储用于访问的 cookie【英文标题】:Facebook iOS SDK not storing cookies for access 【发布时间】:2011-08-06 04:14:52 【问题描述】:

这是一个非常奇怪的错误。登录时,facebook 对象不会在设备上的 safari 上存储任何 cookie,但它会在模拟器上存储。我怎么知道?

NSHTTPCookie *cookie;
NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
for (cookie in [storage cookies])

    NSString* domainName = [cookie domain];
    NSLog(domainName);
    NSRange domainRange = [domainName rangeOfString:@"facebook"];
    if(domainRange.length > 0)
    
        [storage deleteCookie:cookie];
    
 

在模拟器上运行时,我可以看到两个 cookie 的名称。我在设备上得到零。即使使用 facebook 的 DemoApp 也会发生这种情况。 我不知道这是从哪里来的,所以我真的不知道我可以提供什么信息以使帖子更加完整。请向我索取我现在缺少的任何东西。代码只是来自 DemoApp,我没有更改/添加/删除任何内容。

谢谢。

【问题讨论】:

【参考方案1】:

您可能在使用 ios 库时遇到了一件奇怪的事情。

请记住,每个 iOS 应用程序都有单独的存储空间 - 它们以这种方式保存,以便另一个应用程序无法触及不属于它的东西。此沙盒功能可防止恶意或制作不良的应用程序伤害自身以外的任何事物。

这适用于 iPhone 上的 Safari - 为 Safari 中的会话设置的 cookie 对您的应用程序不可用。在您的应用程序的 UIWebView 中设置的 Cookie 对 Safari 不可用。对此有些困惑,因为在桌面 OSX 系统上,您可以共享 cookie。你不能在 iOS 上这样做,尽管类方法的名称很诱人,SharedHTTPCookieStorage。

Facebook SDK 身份验证代码最多可以尝试三种方式在设备上进行身份验证...它可以调用 Facebook 应用程序,并要求通过它进行身份验证,从而允许该应用程序的用户只登录一次。如果未安装 FB 应用程序,它会在移动 safari 浏览器中打开一个窗口并尝试登录,如果可以的话,在浏览器的沙箱中设置 cookie。如果两者都无法打开,它会在您的应用空间中打开一个 UIWebView,并将其 cookie 存储到您的应用本地。

我猜想身份验证发生在你的模拟器和你的 iPhone 上的不同地方,所以 cookie 存在于其他地方。

真正令人沮丧的是,如果您使用了不错的单点登录功能,您将无法在您的应用程序中打开 UIWebviews 到 Facebook,而无需强制进行第二次登录。您无法使用 Cookie。

【讨论】:

还是这样吗?我想知道现在是否有办法解决这个问题,因为要求用户登录两次很烦人...... 是的 - 我没有看到这种变化。 Facebook 身份验证过程实际上是关于获取令牌,以便您可以使用 API - 浏览器 cookie 是一个附带好处。 FB 应用程序为您提供身份验证令牌以通过单点登录使用 API 调用,获取浏览器 cookie 被视为另一项任务。身份验证令牌是您使用有限权限登录的应用程序 - 而浏览器 cookie 是用户前往城堡的钥匙。

以上是关于Facebook iOS SDK 不存储用于访问的 cookie的主要内容,如果未能解决你的问题,请参考以下文章

facebook iOS SDK 授权,无需重定向到 safari

XCode 和 Facebook IOS SDK - 说明不正确

使用 Facebook iOS SDK 登录 UIWebView

是否可以在不使用 iOS SDK 的情况下集成 Facebook 登录?

Cloudbees Jenkins shell 访问被拒绝 Facebook-iOS-SDK

适用于 iOS 访问令牌问题的 Facebook SDK