Native 환경에서 로그인 하여도 Webview는 로그인이 되지 않는 문제 질문 드립니다

안녕하세요. Titanium으로 어플리케이션을 개발하고 있는 개발자 입니다.
이번에 하이브리드 앱을 개발하기 위해서 Titanium을 선택하여 개발하고 있습니다.

로그인 기능은 Native환경에서 id와 password를 입력하여 로그인 하도록 구현했습니다.

로그인은 잘 되었지만 Webview에서 문제가 발생했습니다.
로그인 완료 후 함께 있는 Webview에서도 로그인이 되어 있을 것으로 생각했지만 Webview는 로그인 되지 않은 상태였습니다.

Webview를 reload() 해보았지만 여전히 로그인은 되지 않았습니다.

원인을 찾던 중 Android는 Native와 Webview간에 쿠키가 공유되지 않는다는 점을 알게됐습니다.

해결방법은 HTTPClient와 Webview의 쿠키를 공유하도록 해야한다고 하는데 이 부분이 정확히 무슨 의미인지 모르겠습니다.

exports.login = function(user, onSuccess) {
var url = “http://dnn.j2mr.com/api/rest/user/login”;
var xhr = Ti.Network.createHTTPClient({timeout: 5000});

xhr.onload = function() {
Ti.API.info("Status: " + xhr.status);

var response = JSON.parse(xhr.responseText);
var cookie = this.getResponseHeader("Set-Cookie");
onSuccess(response, cookie);

}

xhr.open(“POST”, url);
xhr.setRequestHeader(“Content-Type”, “application/json; charset=utf-8”);
xhr.send(JSON.stringify(user));
}

이 부분은 로그인 하는 소스입니다. 여기서 cookie 변수에 쿠키를 저장했습니다. 저장된 정보는 아래와 같습니다.

SESS0778d327a5e11c15688db2df06dc5633=Lj5uEHDwOjZCJUbkd-VnaxERMy2wgzfyKNrd0M4fl0E; expires=Wed, 12-Mar-2014 19:36:28 GMT; path=/; domain=.dnn.j2mr.com; HttpOnly

웹뷰에는 이렇게 쿠키를 적용시켰습니다.

web_view1.addEventListener("load", function() {
web_view1.evalJS('document.cookie=' + cookie + ';');

});

궁금한 점은 두 가지 입니다.

  1. 제가 작성한 Native와 Webview의 쿠키 공유 소스 중 잘못된 점을 알고 싶습니다.

  2. Native에서 로그인 했을 때 Webview에서도 로그인 된 상태로 유지할 수 있는 방법이 있다면 알고 싶습니다.

좋은 의견 부탁드립니다. 읽어 주셔서 감삽합니다.

저도 같은 문제로 고생했었는데요, 저는 꼼수로 로그인 할 때 안보이는 웹뷰를 하나 띄워서 웹뷰도 동시 로그인 시켰습니다. 다행히 웹뷰 로그인 잘 유지 되더라고요

저장하려고 하는 쿠키값을 보아하니 그냥 단순한 세션값 같은데, 세션값을 그대로 다른 클라이언트의 쿠키로 저장한다고 해서 자동으로 로그인 되지않습니다.

일단 아래 질문에 대한 답변이 궁금하네요.

  1. 쿠키를 서버에서 UUID나 기타 다른 방식으로 직접 발급하셨나요?
  2. 발급된 쿠키를 서버가 읽어서 인증을 처리하는 과정이 있나요?

즉, 쿠키로 인증하려면 로그인에 성공한 사용자에게 서버가 인지할수있는 쿠키값을 발급해주고, 나중에 그 쿠키를 들고 있는 사람은 전에 로그인 한 녀석이니까… 넌 인증된 녀석이야!! 라고 확인해주는 로직이 구현되어 있어야 한다는 얘기에요~^^

쿠키 인증 로직이 서버에 구현되어 있는지 궁금하네요~