这个问题令我头疼,我不知道这里发生了什么。如果您对Windows Live网络没有任何经验,我会要求您阅读此内容,也许它与此无关,我忽略了一些完全不相关的内容。
简而言之:我编写了一个Objective-C类,允许我连接到名为WLNotificationSession
的Windows Live Messenger网络。我的工作非常简单,我设置username
和password
变量并执行[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的地方。
答案 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。