티스토리 뷰

반응형

webview와 세션이 30분 유지되는 문제로 인한 강제 할당 방법.

문제

webview에서 보안을 위해 세션 처리가 되어있지만 30분 지날 경우 세션 해지된다.


해결방안

1. 특정 버튼 선택 시 webview를 호출할 경우 세션을 강제로 할당할 수 있는 고유 ID등을 파라메터와 같이 전달한다.

2. 추가적인 문제 발생 30분 이후 앱을 실행할 경우 세션이 만료되어 webview가 제대로 동작하지 않는다.

3. 마지막으로 웹뷰에 세션 유지를 위해 파라메터 던지는 시점을 기준으로 현재 시간을 저장한다.

4. 앱이 background상태에서 foreground상태로 돌아올 경우 시간을 체크하여 webview를 강제로 호출한다.

5. 강제 세션 할당 되도록 설정된 webview 호출 함수loadWebViewWithURL를 재 실행 함으로써 세션을 계속 유지.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
//.h
NSDate    *sessionAllocationTime;
extern NSString *const NOTI_ALLOCATION_SESSION;
 
//appDelegate.m
NSString *const NOTI_ALLOCATION_SESSION = @"NOTI_ALLOCATION_SESSION";
 
- (void)applicationDidBecomeActive:(UIApplication *)application {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    
    //세션 할당을 위한 시간 체크.
    NSDate *endTime = [NSDate date];
    
    NSDateComponents *dateComp = [[NSCalendar currentCalendar] components:NSSecondCalendarUnit
                                                                 fromDate:sessionAllocationTime
                                                                   toDate:endTime
                                                                  options:0];
    
    if ([dateComp second] > 1800 ) {
        //세션 할당된 시간이 30분 초가될 경우 webview를 강제로 호출하여 midx를 할당한다.
        [[NSNotificationCenter defaultCenter] postNotificationName:NOTI_ALLOCATION_SESSION object:nil userInfo:nil];
    }
    
    NSLog(@"%ld seconds.", (long)[dateComp second]);
}
 
 
 
//webview.m
//세션 할당 시간이 30분 초과될 경우 마지막 호출 URL을 강제로 호출하여 세션이 풀리지 않도록 한다.
    [[NSNotificationCenter defaultCenter] addObserverForName:NOTI_ALLOCATION_SESSION
                                            object:nil
                                             queue:NSOperationQueuePriorityNormal
                                         usingBlock:^(NSNotification *note)
    {
        [self loadWebViewWithURL:@"마지막 호출된 URL"];
    }];
 
 
cs



반응형
댓글
반응형