Web Programming

쿠키를 이용한 서버간의 세션 공유

_침묵_ 2014. 2. 11. 00:47

기존에 있는 서버는 CakePHP 기반이고, 새로 준비하는 서버는 Play Framework (Java) 기반이다. CakePHP 에서 로그인을 한 후 생기는 세션을 Play 에서도 공유하고자 한다. 이렇게 해놓고나서 기능을 조금씩 조금씩 Play 로 이사할 계획이다.


CakePHP 는 4가지 세션 저장 방식을 제공하는데, 기본으로 제공되는 Cake의 것을 사용하면 서버 쪽에 세션 내용을 담은 파일을 저장해두고, 이 파일을 가리키는 해쉬값만 HTTP 쿠키에 저장해둔다. Play 에서 이 해쉬값을 가지고 처리를 하려면 임시 세션 파일을 읽을 수 있어야 한다. 또한, 임시 저장되는 세션 파일의 내용도 약간 특이한 구조를 가지고 있어서 읽어들이는 처리도 쉽지 않다.


Play Framework 는 CakePHP 와는 달리 세션을 key=value&key=value&... 형태로 쿠키에 저장한다. 


둘 다 실제 쿠키에 저장되는 key는 CAKE_SESSION 이나 PLAY_SESSION 같이 미리 정의된 것을 사용한다. (key값이 정확하진 않음)


결국, 별다른 노력없이 CakePHP 에서 생성하는 세션을 Play 에서 읽어들이지는 못한다.


그래서, 쿠키에 직접 key=value 로 써서 공유하기로 했다. 여기서 value 를 plaintext 로 처리하기 싫어서 또 한 번 삽질을 했다. CakePHP 는 쿠키에 적는 value 를 Rijndael 알고리즘으로 암호화해준다. AES256, CBC, NoPadding 같은게 함께 있다. Play 쪽에서는 javax 의 Cipher 로 복호화를 한다. SecurityKey 와 IvParameter 가 있는데, 아무리 해봐도 안 맞다. 내용의 길이부터가 틀려먹었다. 같은 알고리즘의 다른 구현체가 잘 이해가 되질 않는다.


결국 value 에 대해서는 간단한 암복호화를 적용해서 처리했다.


CakePHP 가 제공하는 세션 저장 방식 중에 DB를 이용하는 것도 있는데, Play도 같은 DB를 볼거니까 괜찮을 것 같기도 한데... 내용이 특이한 구조를 가지고 있는게 또 문제가 되겠군...


CakePHP 는 쿠키에 key, value를 저장할 때 key 에 다가 또 뭔 짓을 한다. CakeCookie['key'] 처럼 key를 한 번 감싸주는데, 사용자 정의로 이 값을 바꿀수도 있지만 CakePHP 코어 코드를 보면 CakeCookie 값이 하드코딩된 곳이 있어서 사용자가 임의로 바꿔주면 원하는대로 동작하지 않는 문제가 있다.


'Web Programming' 카테고리의 다른 글

jQuery 시작 용 사이트  (0) 2010.11.19
Enterprise Flex RIA  (2) 2009.04.02
JSTL (JSP Tag Library)  (0) 2008.07.01