티스토리 뷰

반응형


문제. 별도의 로그인을 통해 받은 세션값을 웹뷰에 할당하고, 다른 계정으로 로그인 시 기존 쿠키값이 남아있는 문제가 발생. 이를 해결하기 위해 전체 쿠키 삭제.


// 모든 캐쉬 삭제

-(void)deleteAllCookie {

NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];

for (NSHTTPCookie *cookie in [storage cookies])

{

[storage deleteCookie:cookie];

}

}


 //특정 도메인만 삭제

-(void)deleteCookieDomain:(NSString *)domain {

NSHTTPCookieStorage *cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage];

NSArray *someCookies = [cookies cookiesForURL:[NSURL URLWithString:domain]];

for (NSHTTPCookie *cookie in someCookies){

[cookies deleteCookie:cookie];

}

}


//webview loadRequest를 호출 후 할당된 쿠키 제거

-(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

[[NSURLCache sharedURLCache] removeCachedResponseForRequest:request];

[[NSURLCache sharedURLCache] removeAllCachedResponses];

}


//webview 초기화 및 쿠키 삭제

1
2
3
4
5
6
7
8
9
10
11
12
13
#pragma mark - WebView
-(void)initWebView
{
    // 모든 캐쉬 삭제
    NSHTTPCookieStorage *storage = [NSHTTPCookieStorage sharedHTTPCookieStorage];
    for (NSHTTPCookie *cookie in [storage cookies]) {
        [storage deleteCookie:cookie];
    }
    
    self.mWebView = [self.mWebView init];
    self.mWebView.delegate = self;
    self.mWebView.scrollView.bounces = NO;
}
cs


//쿠키 할당 받기 NSURLConnection 사용 시(로그인 후)

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)aResponse

NSHTTPURLResponse *HTTPResponse = (NSHTTPURLResponse *) aResponse;

NSDictionary *cookieDictionary = [[NSMutableDictionary alloc] initWithDictionary:[HTTPResponse allHeaderFields]];


//저장된 쿠키값 웹뷰에 할당하기

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
    //webview set cookie
 
    NSString *parameter = [NSString stringWithFormat:@"id=id1111"];
 
 
    NSURL *url = [NSURL URLWithString:urlStr];
 
    NSMutableURLRequest *webRequest = [NSMutableURLRequest requestWithURL:url
                                                   cachePolicy:NSURLRequestUseProtocolCachePolicy
                                                timeoutInterval:10.0f];
 
    [webRequest addValue:[cookieDictionary valueForKey:@"Set-Cookie"] forHTTPHeaderField:@"Cookie"];
 
    [webRequest setHTTPMethod:@"POST"];
    [webRequest setHTTPBody:[parameter dataUsingEncoding:NSUTF8StringEncoding]];
    
    [_mWebView loadRequest:webRequest];
cs


웹뷰에 쿠키를 할당하거나 또는 별도로 로그인 시 받은 고유 id값을 파라메터로 전달해 주는 방법도 있다. 이는 서버 개발자와 상의해서 쿠키로 처리할 것인지 파라메터로 처리할 것인지 협의 후 결정


고찰. 

상태 : 로그인 후 생성된 사용자 정보를 webview에 파라메터로 전달하여 세션 유지

문제 : 로그인 처리 후 webview에 세션을 유지하기 위한 파라메터를 던져서 호출할 경우 초기 loadRequest시 세션이 유지 되지 않아 0.6초 delay를 통해 다시 webView를 같은 url로 loadRequest하여 처리하였으나 네트워크나 서버 상태에 따라 연결되지 않는다.

원하는 방향 : webview 호출 시 한번에 세션을 유지하고 싶음.

테스트 내용 :

1. 로그인 시 NSURLConnection통해 얻은 쿠키값을 저장 후 webview에 전달하였으나, 다른 페이지를 호출하거나 뒤로가기 선택 시 세션 연동이 불안정한 상태로 유지 됨.

2. NSURLConnection를 통한 로그인 후 할당 받은 세션들을 지우고 webview에 파라메터를 던져서 호출 하였으나 세션이 할당되지 않음.





반응형
댓글
반응형