2010-09-21 93 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