2010-09-21 102 views
2

这个问题让我感到头疼,我不知道这里发生了什么。如果您对Windows Live网络没有任何经验,那么我要求您阅读本文,也许它与此无关,并且我忽略了与Windows Live网络完全无关的东西。连接到Windows Live Messenger网络的不可能的问题

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

比方说,我有两个Windows Live帐户。第一个是A,现在登录。

的问题出现了,当我尝试火了第二WLNotificationSession,与其他Windows Live帐户,B.它总是失败。用户名和密码是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 &运行:

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

notificationSession1.username = @"[email protected]";

notificationSession1.password = @"testpwd";

[notificationSession1 start];

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

notificationSession2.username = @"[email protected]";

notificationSession2.password = @"testpwd";

[notificationSession2 start];

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

更新2

继大卫的建议,这个问题可能是cookie相关的,我加入这个代码到我的项目: [[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever];

我也用他的方法在下面的评论删除任何cookie之前在每个URL请求之后。这可能是不必要的,但我仍然这样做。

我认为在这一点上可以肯定的是,它不是饼干,或者必须有一些其他地方存储cookie。

+0

你正在重复使用WLNotificationSession的同一个实例,还是创建一个新的?有可能你有一些状态变量在登录尝试之间没有被重置。即使你正在使用新的实例,你是否将状态存储在静态变量或全局变量中?或者可能会持续存在的ivars之外的其他地方? – 2010-09-22 00:56:28

+0

这就是你会想到的,但不,我正在使用单独的WLNotificationSession实例,每个实例都有自己的套接字和变量。此外,根本没有静态或全局变量。 (我在问题中添加了一些示例代码) – Rits 2010-09-22 13:19:05

+0

你使用什么框架/类来连接?你发什么?只有登录名和密码? – David 2010-09-22 13:33:31

回答

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。

+0

嗯,这对我来说肯定有意义,我希望这会是问题..但不幸的是,问题依然存在。我正在使用你的代码来删除所有的cookie,而且我正在使用这个:'[[[NSHTTPCookieStorage sharedHTTPCookieStorage] setCookieAcceptPolicy:NSHTTPCookieAcceptPolicyNever];'我认为这应该消除cookie搞乱的可能性,对吧? – Rits 2010-09-23 19:57:29

+0

没关系。有用。饼干的事情做到了。非常感谢。 – Rits 2010-09-23 20:16:14