连接到Windows Live Messenger网络不可能出现问题

时间:2010-09-21 18:11:15

标签: iphone objective-c cocoa nsurlconnection live

这个问题令我头疼,我不知道这里发生了什么。如果您对Windows Live网络没有任何经验,我会要求您阅读此内容,也许它与此无关,我忽略了一些完全不相关的内容。

简而言之:我编写了一个Objective-C类,允许我连接到名为WLNotificationSession的Windows Live Messenger网络。我的工作非常简单,我设置usernamepassword变量并执行[notificationSession start];。然后它成功登录。

假设我有两个Windows Live帐户。第一个,A,现在已登录。

当我尝试使用其他Windows Live帐户B启动一秒 WLNotificationSession时出现问题。它总是失败。用户名和密码是100%正确的。当我尝试首先登录B时,它会成功。当我在B登录时尝试A时,它会失败。 第二次登录会话始终失败。

它不能像“在短时间内尝试过多登录”。当我登录A时,退出应用程序,重新启动应用程序并再次登录A,两次尝试都成功。我可以在20秒内完成。但是,当我启动应用程序时,登录A,断开A,等待2个小时,登录B(所有没有关闭应用程序),它失败。 (??)

对于那些有WL网络经验的人:在Tweener身份验证期间发生故障。从登录服务器获取“Authentication-Info”或“WWW-Authenticate”HTTP标头的部分。当它失败时,我得到这个值: "Www-Authenticate" = "Passport1.4 da-status=failed-noretry,srealm=Passport.NET,ts=-2,prompt,cburl=http://messenger.msn.com/images/logo102x88.gif,cbtxt=.NET%20Messenger%20Service";

我真的希望有人可以帮忙解决这个问题。谢谢。

UPDATE 这是一些示例代码。我创建了一个新项目,在applicationDidFinishLaunching方法中添加此代码,然后单击Build& amp;运行:

WLNotificationSession *notificationSession1 = [[WLNotificationSession alloc] init];

notificationSession1.username = @"testaccount1@hotmail.com";

notificationSession1.password = @"testpwd";

[notificationSession1 start];

WLNotificationSession *notificationSession2 = [[WLNotificationSession alloc] init];

notificationSession2.username = @"testaccount2@hotmail.com";

notificationSession2.password = @"testpwd";

[notificationSession2 start];

notificationSession1总是成功,notificationSession2总是失败。没有全局变量或共享变量。

更新2

根据David的建议,问题可能与cookie有关,我将此代码添加到我的项目中: [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever];

我还在下面的评论中使用他的方法删除每个URL请求之前和之后的任何cookie。这可能是不必要的,但无论如何我都是这样做的。

我认为在这一点上可以安全地假设它不是cookie,或者必须存在其他存储cookie的地方。

1 个答案:

答案 0 :(得分:1)

  

没有全局变量或共享变量

然后,由于使用http请求执行身份验证,这可能是cookie问题。可能会有一些会话cookie提醒服务器有关前一个会话的信息。

我知道FBConnect(适用于iPhone的Facebook API)在注销以删除任何Cookie时使用以下方法:

- (void)deleteFacebookCookies {
  NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];
  NSArray* facebookCookies = [cookies cookiesForURL:[NSURL URLWithString:@"http://login.facebook.com"]];
  for (NSHTTPCookie* cookie in facebookCookies) {
    [cookies deleteCookie:cookie];
  }
}

你可以尝试这个(用你的网址替换facebook网址)。您甚至可以添加一些NSLog来监视这些cookie。