session_destroy - 로그아웃시 에러가 발생합니다.

session_destroy - 로그아웃시 에러가 발생합니다.

QA

session_destroy - 로그아웃시 에러가 발생합니다.

본문

Warning: session_destroy(): Session object destruction failed

 

항상 발생하는건 아니고 특정 경우에만 발생하는데요.

같은 동작을 해도 에러가 발생 할 때가 있고 아닐때가 있네요.

평소에는 잘 작동하구요. 발생한 후에 새로고침을 하면 또 정상적으로 작동이됩니다.

 

session_start는 common.php에서 하였습니다.

 

몇날몇일을 검색해보고 찾아봤는데 도저히 해결을 못하겠네요 ㅜㅜ

 

//common.php


//==============================================================================
// SESSION 설정
//------------------------------------------------------------------------------
@ini_set("session.use_trans_sid", 0);    // PHPSESSID를 자동으로 넘기지 않음
@ini_set("url_rewriter.tags",""); // 링크에 PHPSESSID가 따라다니는것을 무력화함 (해뜰녘님께서 알려주셨습니다.)
session_save_path(G5_SESSION_PATH);
if (isset($SESSION_CACHE_LIMITER))
    @session_cache_limiter($SESSION_CACHE_LIMITER);
else
    @session_cache_limiter("no-cache, must-revalidate");
ini_set("session.cache_expire", 180); // 세션 캐쉬 보관시간 (분)
ini_set("session.gc_maxlifetime", 10800); // session data의 garbage collection 존재 기간을 지정 (초)
ini_set("session.gc_probability", 1); // session.gc_probability는 session.gc_divisor와 연계하여 gc(쓰레기 수거) 루틴의 시작 확률을 관리합니다. 기본값은 1입니다. 자세한 내용은 session.gc_divisor를 참고하십시오.
ini_set("session.gc_divisor", 100); // session.gc_divisor는 session.gc_probability와 결합하여 각 세션 초기화 시에 gc(쓰레기 수거) 프로세스를 시작할 확률을 정의합니다. 확률은 gc_probability/gc_divisor를 사용하여 계산합니다. 즉, 1/100은 각 요청시에 GC 프로세스를 시작할 확률이 1%입니다. session.gc_divisor의 기본값은 100입니다.
session_set_cookie_params(0, '/');
ini_set("session.cookie_domain", G5_COOKIE_DOMAIN);
@session_start();

 

//logout.php


// 이호경님 제안 코드
    session_unset(); // 모든 세션변수를 언레지스터 시켜줌
    session_destroy(); // 세션해제함
    // 자동로그인 해제 --------------------------------
    set_cookie('ck_mb_id', '', 0);
    set_cookie('ck_auto', '', 0);
    // 자동로그인 해제 end --------------------------------
    if ($url) {
        if ( substr($url, 0, 2) == '//' )
            $url = 'http:' . $url;
        $p = @parse_url(urldecode($url));
        /*
            // OpenRediect 취약점관련, PHP 5.3 이하버전에서는 parse_url 버그가 있음 ( Safflower 님 제보 ) 아래 url 예제
            // http://localhost/bbs/logout.php?url=http://sir.kr%23@/
        */
        if (preg_match('/^https?:\/\//i', $url) || $p['scheme'] || $p['host']) {
            alert('url에 도메인을 지정할 수 없습니다.', G5_URL);
        }
        $link = $url;
    } else if ($bo_table) {
        $link = G5_BBS_URL.'/board.php?bo_table='.$bo_table;
    } else {
        $link = G5_URL;
    }
    goto_url($link);

이 질문에 댓글 쓰기 :

답변 1

logout.hphp에서 session_unset(); 또는 session_destroy(); 둘 중에 하나를 주석처리나 삭제하여 보세요.

unset을 주석처리했을때는 세션이 유지돼서 로그아웃이 안되는 경우가 생겼었는데,
destroy를 주석처리하니 아직까지는 에러없이 잘 작동하는거 같네요.
두개를 같이 사용했을때 에러가 발생했던건 세션을 두번 초기화해서 그랬던걸까요..?

답변을 작성하시기 전에 로그인 해주세요.
전체 67
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT