RainStar Story

PHP」서브도메인(2차도메인) 세션공유 - 호스팅 이용시 처리방법 본문

Developer/PHP / MySql

PHP」서브도메인(2차도메인) 세션공유 - 호스팅 이용시 처리방법

레인스타 2017. 11. 1. 16:30

기본적으로 세션은 도메인에 따라가며 도메인 앞에 추가하는 서브도메인과 세션을 별도로 처리됩니다.

이에 따라 서브도메인의 사이트를 개별적으로 운영이 가능합니다.


하지만 이번개발건에서 각 서브도메인들과 세션을 공유해야 하는 이슈가 발생했습니다.

서버에 접근이 가능하다면 php ini 에서 설정하겠지만, 아쉽게도 카페24 웹호스팅을 이용중이라 PHP 환경설정파일에 접근이 불가능합니다.


이런 경우 웹소스에서 세션설정을 바꿔주어도 처리가 가능합니다.


서브도메인(2차도메인) 세션공유

세션은 항상 웹소스의 상단에서 처리를 해주어야 하기에 세션 설정부분이 제일 상단에 위치하니 해당 위치로 이동합니다.

삽입 할 소스는 간단합니다.


session_set_cookie_params(0, '/');

@session_name('mysession');

@ini_set("session.cookie_domain", ".abc.com");


이 세줄의 소스를 삽입하면 됩니다.

주의 할 점은 도메인주소 앞에 . 을 꼭 붙여야 합니다.  .abc.com

또한 세션이 실행되기에 앞서 설정되야 하므로 session_start() 전에 삽입해야 합니다.

session_set_cookie_params(0, '/');

//=> 서브도메인과 세션공유를 위해 ====>
@session_name('mysession');
@ini_set("session.cookie_domain", ".abc.com"); // 도메인 주소앞에 .기입할것

@session_start(); // 세션 스타트


세션변수를 생성하고 서브도메인과 공유가 되는지 테스트를 진행해 봅니다.


테스트 진행방법은 아래와 같습니다.

각 서브도메인 header에 위 소스가 들어있는 페이지를 불러옵니다.

그리고 세션변수가 없다면 세션변수를 생성하는 코드를 삽입하고 서브도메인을 돌아다니며 세션변수가 제대로 출력되는지 확인합니다.

세션변수는 중복되어 생성됬는지를 체크하기 위하여 time() 함수를 사용합니다.


session_set_cookie_params(0, '/');

//=> 서브도메인과 세션공유를 위해 ====>
@session_name('mysession');
@ini_set("session.cookie_domain", ".abc.com"); // 도메인 주소앞에 .기입할것

@session_start(); // 세션 스타트

// 생성된 세션키가 없다면 세션키를 새로 생성합니다.
if( !$_SESSION[LogSessKey] ){

	$_SESSION[LogSessKey] = time()."_".rand(100,999);
}

// 생성된 세션키를 출력합니다.
echo $_SESSION[LogSessKey];


위 소스를 서브도메인들의 header에 삽입 후 서브도메인을 바꿔가며 확인을 해봅니다.

세션공유가 제대로 되었다면 모두 동일한 키값을 출력하며, 그렇지 않다면 키값이 계속 바뀌게 될것입니다.

Comments