본문 바로가기

프로그램/PHP

[스크랩] 세션아이디(PHPSESSID) 문제 해결방법

웹호스팅을 받고 있는데 홈페이지 접속시 주소표시줄에 세션아이디(보통 PHPSESSID)가 표시 됩니다.
항상 붙어 있는것이 아니라 처음 접속 -> 링크 클릭 이렇게 두단계에서만  표시가 됩니다..
문제 해결을 위해 웬 종일 여기저기 뒤적거리면서 이것 저것 해봤습니다.
phpschool, sir, 검색사이트, php메뉴얼를 돌아다니며 PHPSESSID로 검색해서 찾아낸 방법들이 아래입니다.

1)
ini_set('session.use_trans_sid', 0);
session_start();

2)
.htaccess 에
php_value session.use_trans_sid 0
혹은 php_flag session.use_trans_sid 0
혹은

php_flag session.use_trans_sid off


3)
session_start();
if ($HTTP_COOKIE_VARS[SESSION_CHECK] == "")
{
    setcookie("SESSION_CHECK", "Y", 0, "/");
    $PHPSESSID=session_id();
    setcookie("PHPSESSID", $PHPSESSID, 0,"/");
}

호스팅업체의 세팅이 1로 돼 있어서 바꿔야 되겠기에 1번 방법을 봤더니 이미 그누보드에 적용이 돼 있더군요.
메뉴얼에는 string ini_set (string, string) 으로 돼 있어서 혹시나 하는 마음에 '를 " 로 바꿔보고 0 을 '," 로 씌워도 보고, 0을 FALSE로도 바꿔보고..
여러가지 방법을 써봐도 ini_get('session.use_trans_sid') 값은 1로 고정됩니다..
메뉴얼에는 어디서든 변경가능 하다는데 저 값을 변경시키지 못하게 하는 방법이 있는것인지..
머리 아파오죠.. 테스트 해본 다른 값들은 변경가능한데 이 값만 안되니까요..
나중에 보니 php의 버그였다는 글이 있더군요.. 호스팅 업체 php 버전이 4.3.10 인데 아직 해결이 안된 버전일까요..

2번 방법은 .htaccess 화일을 만들어 저 내용들을 써넣기만 하면 서버 오류 메시지만 뜨네요..
이 방법을 사용하려면 AllowOverride 설정이 맞아야 한다네요.
호스팅업체의 홈 디렉토리 세팅 내용이 아래와 같은데 PHP세팅과 관련된부분이 어디인지 모르겠더군요..

    AllowOverride FileInfo AuthConfig Limit
    Options Includes MultiViews SymLinksIfOwnerMatch IncludesNoExec
   
        Order allow,deny
        Allow from all
   

   
        Order deny,allow
        Deny from all
   



3번 방법은  효과가 없었습니다.
세션아이디가 쿠키에 저장되는 것이 초기 접속후 리플레쉬를 하거나 페이지 이동시라는데 이미 초기 접속상태에서 표시가 돼버리니까요..

결국 찾아낸 방법은

ini_set("url_rewriter.tags","");

였습니다.. 해결책을 찾아내니 너무 기쁩니다.. 한편으론 허탈하기도 하구요..
다시 호스팅 업체 정보를 살펴보니
url_rewriter.tags 에 a=href,area=href,frame=src,input=src,form=fakeentry 값이 할당돼 있더군요..
그래서 링크마다  세션 아이디가 따라다니고 있었던 거구요..
어떻게 생각하면 이상하기도 합니다. 저렇게 링크마다 따라 다니게 해놨으니 지속적으로 세션아이디가 붙어야 하는데 처음에만 나오니까요..
아무튼 session.use_trans_id 에만 매달렸는데 엉뚱한 곳에서 해결이 되버렸습니다..

혹시라도 저와 같은 상황에서 고민하셨던 분은 common.php 의 175행 정도에
ini_set('session.use_trans_sid', 0);    // PHPSESSID를 자동으로 넘기지 않음
바로 밑에  ini_set("url_rewriter.tags",""); 를 적어주세요..