PHP에서 서브도메인간 세션 값이 지워지는 문제

PHP에서 서브도메인간 세션(session)을 공유하기 위한 방법은 어렵지 않다.

만약 my.com, www.my.com, sub.my.com 등 *.my.com 도메인간에 세션을 공유하고 싶다면 PHP 세션 ID가 저장될 쿠키(cookie)의 도메인을 .my.com 으로 하면 된다.

<?php
session_set_cookie_params(0, '/', COOKIE_DOMAIN);
session_start();

그런데 이상하게 A 도메인에 접속해서 만들어진 세션 값이 B 도메인으로 접속하면 세션의 값이 지워지는 문제가 발생했다. 좀 더 정확하게 설명하자면 도메인이 바뀐 상태에서 session_start() 가 호출되면 세션이 빈값으로 초기화가 된다.

우분투 서버에서는 문제가 없다가 CentOS에서 이런 문제가 발생했다. php.ini를 꼼꼼히 살펴봤지만 문제가 될 것 같은 부분은 없었다. 수많은 삽질과 구글링 끝에 문제의 원인을 찾았다.

PHP 확장 모듈중 하나인 수호신(Suhosin)이 원인이었다. 아래의 설정을 추가하면 문제를 해결 할 수 있다.

suhosin.cookie.cryptdocroot=Off
suhosin.session.cryptdocroot=Off

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다