PHP에서 다중 세션 구현 시 세션 이름과 세션 ID 유의 사항

많은 경우 기본 세션 이름(PHPSESSID)을 쓰거나 단일 세션만 사용하기 때문에 세션 이름 변경 시 별다른 문제를 겪을 일은 없다. 그런데 나는 이번에 다중(멀티) 세션을 하기 위해 세션을 깊게 다뤄보느라 다양한 테스트를 해보는 과정에서 문제점을 발견했다.

session_name('test1');
session_start();
echo session_id();
session_write_close();

session_name('test2');
session_start();
echo session_id();
session_write_close();

아직 세션 쿠키가 없는 깨끗한 상태에서 test1 이름으로 세션을 시작하고 세션 ID가 생성된 후 세션을 닫고 다시 test2 이름으로 세션을 실행하면 새로운 세션 ID가 생성되는 것이 아닌 앞서 생성한 세션 ID가 그대로 사용된다.

그렇다면 test1, test2 각자의 세션 쿠키에 각자 다른 세션 ID를 가지고 있다면 문제가 없을 것 같지만 예상과 다르다. test2의 세션 쿠키에 있는 세션 ID와는 상관 없이 처음 test1의 세션 쿠키에서 가져온 세션 ID를 그대로 사용한다.

즉, 한 번 세션 ID가 정해지면 session_id(), session_regenerate_id() 등의 함수를 사용하여 직접 바꿔주지 않는 한 세션 ID는 바뀌지 않는다. 그래서 직접 세션 쿠키로 부터 가져온 세션 ID를 session_id() 함수에 전달해줘야 한다.

세션 ID를 바꾸기 위해 session_regenerate_id() 사용을 하는 경우도 주의해야 한다. 만약 test1 세션을 쓰다가 test2 세션으로 변경하면 세션 ID는 test1의 것을 그대로 쓰고 있는 상태인데 이때 session_regenerate_id() 함수를 실행하면 기존에 쓰던 test1의 세션 ID를 못쓰게 만들고 새로운 세션 ID가 생성된다.

PHP에서 다중 세션을 구현하기 위해서는 위와 같은 점들을 고려하고 세션과 쿠키에 대한 기초 지식을 확실하게 다질 필요가 있다.

이 글은 개발 카테고리에 분류되었고 태그가 있으며 님에 의해 에 작성되었습니다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다