2011-09-30 3 views
1

내 앱에서 WS 통화를 통해 획득 한 데이터가 포함 된 splitview가 있습니다. 이 데이터를 받으려면 사용자가 로그인해야합니다. 로그인하려면 응용 프로그램이로드 될 때 로그인 화면을 모달로 표시하십시오. 자격 증명을 입력 한 후 isLoggedIn WS 호출의 결과를 인쇄합니다. 이 모든 것이 훌륭하게 멋지게 작동합니다.iOS - 웹 서비스를 통해 로그인

문제는 로그인 화면에서 isLoggedIn이 사용자가 세션 ID를 포함하여 성공적으로 로그인되었음을 반환하지만 사용자가 로그인 화면을 닫으면 사용자가 로그인하지 않아서 모든 WS 호출이 실패한다는 것입니다. 세션 ID가 일치하고 WS가 호출을 수신하지만 로그인 화면을 닫으면 iPad가 세션을 제거한 것처럼 보입니다. 이것은 다음과 같은 로그가 발생합니다

2011-09-30 09:37:05.335 DSApp[366:707] url call: http://***/ipadwebservice.asmx/authenticateUser?username=user&password=pass 
2011-09-30 09:37:05.508 DSApp[366:707] Call succesful. 
2011-09-30 09:37:05.509 DSApp[366:707] Logged in successfully. 
2011-09-30 09:37:05.511 DSApp[366:707] Dismissing LoginView. 
2011-09-30 09:37:08.644 DSApp[366:7d0f] url call: http://***/ipadwebservice.asmx/getChildFoldersByFolderID?folderId=-1 
2011-09-30 09:37:08.649 DSApp[366:7d0f] Call failed. (Reason: User not logged in!) 
2011-09-30 09:37:09.493 DSApp[366:7d0f] url call: http://***/ipadwebservice.asmx/getDocumentsByFolderId?folderId=-1 
2011-09-30 09:37:09.497 DSApp[366:7d0f] Call failed. (Reason: User not logged in!) 

또 다른 이상한 것은 내가 로그인 정보를 하드와 applicationDidFinishLaunching 방법으로 호출 할 때, 모든 것이 완벽하게 작동하고 모든 WS 호출이 성공적으로 받았다한다는 것이다.

부에노 :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
# warning hardcode login 
    [WebservicesController authenticateUserWithName:@"user" andPassword:@"pass"]; 

    self.window.rootViewController = self.splitViewController; 

    //login 
    LoginViewController *loginView = [LoginViewController new]; 
    loginView.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
    [self.splitViewController presentModalViewController:loginView animated:YES]; 
    [loginView release]; 
} 

없음 부에노 :

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
    { 
    # warning hardcode login 
     //[WebservicesController authenticateUserWithName:@"user" andPassword:@"pass"]; 

     self.window.rootViewController = self.splitViewController; 

     //login 
     LoginViewController *loginView = [LoginViewController new]; 
     loginView.modalTransitionStyle = UIModalTransitionStyleCoverVertical; 
     [self.splitViewController presentModalViewController:loginView animated:YES]; 
     [loginView release]; 
    } 
+0

동일한 것으로 예상 할 때 하드 코딩 된 문자열과 사용자 입력을 비교해 보았습니까? 예를 들어'[WebservicesController authenticateUserWithName : username andPassword : password]'메소드에 중단 점을 설정하고 전달 된'username' 인수를 하드 코드 된''user "'문자열과 비교하고'password' 인수에 하드 코드 된' "pass"문자열. 나는 이것들이 일치하지 않는 어떤 가능성도 배제하고 싶다. (인코딩이나 그 밖의 이유 ... 숨겨진 공간 ... 등등). GDB에서'print (bool) [username isEqualToString : @ "user"]'와 마찬가지로 패스워드를 입력하십시오. – Sam

+0

WebServices!를 호출하는 메서드 코드를 게시해야합니다! –

답변

0

귀하의 코드 exemple 정말 명확하지 않다, 그러나 당신이 컨트롤러를 로그인 당신이 WebservicesController의 인스턴스를 창조 하셨 는가?

당신이 당신의 로그인 컨트롤러를 놓으면, 당신의 WebservicesController 아마 인증이 너무 해제하고

원인 ...

그리고 그 설명해야하는 이유 AppDelegate에

0

에서의 작업 세션 ID의 일치와 WS가 호출을 수신하지만, iPad 은 로그인 화면을 닫을 때 세션을 제거하는 것처럼 보입니다.

세션을 "제거 할 수있는 코드가 있습니까? 그렇다면 거기에 중단 점을 넣고 호출되는지 확인하십시오.

그렇지 않으면 내 생각 엔 결국 이 아니며은 요청과 함께 세션 ID를 올바르게 전송합니다.

관련 문제