ionic 에서 쿠키 다루기 ( ionic에서 쿠키에 대한 잘못된 인식 )

Posted by Everyharu
2016. 9. 4. 00:49 IT/ionic



일부 블로그 글들을 보고 있자면 조금 황당한 글들을 발견할 수 있다.

아이오닉에서 쿠키를 사용할 수 없다는 글이다. 그것도 대놓고 bold 처리까지 해놓은 경우도 있다.

음...대체 왜 쿠키를 사용할 수 없다고 써놓은건지 모르겠지만 기본적으로 아이오닉은 웹앱이다. 당연히 쿠키도 있다.

안되는 부분은 직접적으로 사용해야 하는 setCookie와 크로스도메인에 따른 쿠키일 뿐이다.


무슨말인지 모르겠다고?


무슨말이냐면 ionic 자체는 웹앱이고 이 웹이란놈은 쿠키를 사용할수있는 구조이다.

문제는 이 쿠키라는 놈이 웹상에서 도메인으로 구분되어 공유되는 놈이라
내가 현재 속해있지 않은 도메인에서 다른도메인의 쿠키를 설정할 수 없다는 말이다.

아이오닉의 경우에는 도메인이 있는게 아니라 앱 내부의 파일을 읽어들여 실행하는 방식이기 때문에 도메인이라고 부를만한 부분이 없다.


예를들어 ionic에서 주로 쓰는 api의 주소가 kafra.kr 이라고 하자.

그런데 ionic 앱안에서는 이 kafra.kr 에 설정한 쿠키값을 읽어오거나 세팅할 수 없다는 말이다.

이건 도메인이 얽혀있어서 생긴 문제이다.


그럼 쿠키 사용할 수 없는거 아니냐고??
아니 그말에는 어폐가 있다. 분명히 사용은 할 수 있다.
분명하게 말하지만 흔히 사용하는 api에 필요한 정도의 쿠키는 사용이 가능하다.

내부적으로 값을 저장하고 불러오고 하는걸 못할뿐인거다.


그럼 어떻게 쓰냐고?


HTTP Header를 잘보면 된다. 쿠키라는 놈은 우리가 document.cookie 를 통해서 설정하고 가져오고 할 수 있지만,
원래 우리가 로그인하거나 할 때 사용하는 쿠키는 이런식으로 세팅한게 아니라 HttpOnly 가 밖혀서 set-cookie 라는 헤더값을 통해서 온다.
이경우에는 같은 도메인이라고 할지라도 어차피 js로는 못읽는다.

한마디로 서버를 통해서 쿠키를 설정하고 지우고 하는건 충분히 된다는 이야기다.
일부 블로그에서 안된다고 하는 말은 이 웹이라는 구조를 잘 몰라서 그러는 것이니 쿠키가 안된다고 오해하지 말자.


결국 ionic 앱 내부에서 전역변수 쓰듯이 값을 저장하고 지우고 하는 용도로 쿠키를 사용하지 말란 얘기다.
애초에 쿠키에 내부적인 값들을 써대면 통신비용이 더 나간다. 애초에 써서는 안되는거다.
내부적으로 db처럼 사용하고 싶다면 localStorage 를 사용하자.



부가적으로 Cordova 의  InAppBrowser 를 Ionic에서 사용할 때 이 InAppBrowser와 Ionic간에는 쿠키가 공유되지 않는다.
때문에 이를 공유하고 싶다면 InAppBrowser API 중에 executescript 라는 놈이 있다. 이놈을 활용하면 공유할 수 있는 방법이 생긴다.
내가 사용해보았던 경우를 설명하기보다는 이 부분은 자유롭게 활용하면 될듯하다.