session_destroy - 로그아웃시 에러가 발생합니다. 채택완료
유명우
7년 전
조회 3,159
Warning: session_destroy(): Session object destruction failed
항상 발생하는건 아니고 특정 경우에만 발생하는데요.
같은 동작을 해도 에러가 발생 할 때가 있고 아닐때가 있네요.
평소에는 잘 작동하구요. 발생한 후에 새로고침을 하면 또 정상적으로 작동이됩니다.
session_start는 common.php에서 하였습니다.
몇날몇일을 검색해보고 찾아봤는데 도저히 해결을 못하겠네요 ㅜㅜ
//common.php
</p>
<p>//==============================================================================
// SESSION 설정
//------------------------------------------------------------------------------
@ini_set("session.use_trans_sid", 0); // PHPSESSID를 자동으로 넘기지 않음
@ini_set("url_rewriter.tags",""); // 링크에 PHPSESSID가 따라다니는것을 무력화함 (해뜰녘님께서 알려주셨습니다.)</p>
<p>session_save_path(G5_SESSION_PATH);</p>
<p>if (isset($SESSION_CACHE_LIMITER))
@session_cache_limiter($SESSION_CACHE_LIMITER);
else
@session_cache_limiter("no-cache, must-revalidate");</p>
<p>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입니다.</p>
<p>session_set_cookie_params(0, '/');
ini_set("session.cookie_domain", G5_COOKIE_DOMAIN);</p>
<p>@session_start();</p>
<p>
//logout.php
</p>
<p>// 이호경님 제안 코드
session_unset(); // 모든 세션변수를 언레지스터 시켜줌
session_destroy(); // 세션해제함</p>
<p> // 자동로그인 해제 --------------------------------
set_cookie('ck_mb_id', '', 0);
set_cookie('ck_auto', '', 0);
// 자동로그인 해제 end --------------------------------</p>
<p> if ($url) {
if ( substr($url, 0, 2) == '//' )
$url = 'http:' . $url;</p>
<p> $p = @parse_url(urldecode($url));
/*
// OpenRediect 취약점관련, PHP 5.3 이하버전에서는 parse_url 버그가 있음 ( Safflower 님 제보 ) 아래 url 예제
// <a href="http://localhost/bbs/logout.php?url=http://sir.kr%23@/" target="_blank" rel="noopener noreferrer">http://localhost/bbs/logout.php?url=http://sir.kr%23@/</a>
*/
if (preg_match('/^https?:\/\//i', $url) || $p['scheme'] || $p['host']) {
alert('url에 도메인을 지정할 수 없습니다.', G5_URL);
}</p>
<p> $link = $url;
} else if ($bo_table) {
$link = G5_BBS_URL.'/board.php?bo_table='.$bo_table;
} else {
$link = G5_URL;
}</p>
<p> goto_url($link);</p>
<p>
댓글을 작성하려면 로그인이 필요합니다.
답변 1개
답변을 작성하려면 로그인이 필요합니다.
로그인
destroy를 주석처리하니 아직까지는 에러없이 잘 작동하는거 같네요.
두개를 같이 사용했을때 에러가 발생했던건 세션을 두번 초기화해서 그랬던걸까요..?