반응형

쿠키 동기화 동작 순서(세션 유지용)

  • 쿠키 동기화용 전역 변수 생성 및 초기화(CookieJar)
  • retrofit2를 이용하여 로그인(CookieJar를 client로 지정)
  • webview 초기화 시 CookieJar에 저장된 쿠키를 동기화 시켜줌

 

 

CookieJar 사용을 위한 준비

//project gradle에 추가
allprojects {
    repositories {
        maven { url "https://jitpack.io" }
    }
}
 
//app gradle
implementation 'com.github.franmontiel:PersistentCookieJar:v1.0.1'

 

CookieJar 전역 변수 생성 및 초기화

  • 적절한 초기화 부분에 삽입
public class Common {
  //전역 선언
  public static String URL = "http://www.srctree.co.kr/myserver/";//base url
  public static CookieJar cookieJar = null;
  //...
}

//쿠키 동기화용 CookieJar 생성 : 적절한 초기화 위치
Common.cookieJar = new PersistentCookieJar(new SetCookieCache(), new SharedPrefsCookiePersistor(this));

 

retrofit2에 client로 지정

  • cookieJar에 쿠키 정보가 저장됨
//OkHttpClient 생성
OkHttpClient client = new OkHttpClient.Builder().cookieJar(Common.cookieJar).build();

//client로 지정
Retrofit retrofit = new Retrofit.Builder()
        .baseUrl(Common.URL)
        .client(client)
        .addConverterFactory(GsonConverterFactory.create())
        .build();
selfStickService = retrofit.create(SelfStickService.class);

 

webview 초기화 할때 쿠키 동기화

  • cookieJar에 저장된 쿠키를 웹뷰에 주입
  • 세션용 쿠키만 동기화 시키면 서버에서 동일한 세션으로 유지가 됨!
  • 톰캣 : JSESSIONID, PHP : PHPSESSID
//---웹뷰 로딩시 쿠키 동기화------
//기존 쿠키 Clear
CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.setAcceptThirdPartyCookies(webview, true);
cookieManager.removeAllCookies(null);
cookieManager.flush();

//CookieJar로 저장된 쿠키 읽어와서 주입시켜줌
List<Cookie> cookies = Common.cookieJar.loadForRequest(HttpUrl.parse(Common.URL));
if (cookies != null) {
    for (Cookie cookie : cookies) {
        //특정 조건을 두어서 그에 맞는 것만 주입
        //아래는 JSP 톰캣의 세션을 위한 쿠키를 찾아서 넣는 것임("JSESSIONID")
        //참고로 PHP에서의 세션 이름은 "PHPSESSID"
        //(아래 조건을 없애면 모든 쿠키가 동기화 됨)
        if (cookie.name().toLowerCase().contains("session") || cookie.name().toLowerCase().contains("sessid")){
            String cookieString = cookie.name() + "=" + cookie.value() + ";";
            cookieManager.setCookie(cookie.domain(), cookieString);
        }
    }
}
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기