当前位置:  开发笔记 > Android > 正文

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

如何解决《FacebookiOSSDK不存储用于访问的cookie》经验,为你挑选了1个好方法。

这是一个非常奇怪的错误.登录时,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> giff..:

您可能会遇到iOS库的奇怪之处.

请记住,每个iOS应用程序都有单独的存储空间 - 它们保持这种方式,以便其他应用程序无法触及不属于它的内容.此沙盒可防止恶意或制造不良的应用程序损害除自身以外的任何其他内容.

这适用于iPhone上的Safari - 在Safari中为会话设置的cookie不适用于您的应用.在您的应用程序中的UIWebView中设置的Cookie不适用于Safari.由于在桌面OSX系统上,您可以共享cookie,因此存在一些混淆.尽管类方法的诱人名称为SharedHTTPCookieStorage,但您无法在iOS上执行此操作.

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

我猜测验证发生在模拟器和iPhone上的不同位置,因此cookie存在于其他地方.

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


是的 - 我没有看到这种变化.Facebook身份验证过程实际上是关于获取令牌以便您可以使用API​​ - 浏览器cookie是一个附带好处.FB应用程序为您提供身份验证令牌以通过单点登录使用API​​调用,将浏览器cookie视为另一项任务.身份验证令牌是您使用有限权限登录的应用程序 - 而浏览器cookie是用户所在的城堡的关键.
推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有