로그인 할 때 오래된 세션파일 삭제하기 2 > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

로그인 할 때 오래된 세션파일 삭제하기 2 정보

로그인 할 때 오래된 세션파일 삭제하기 2

첨부파일

login_check.skin.php (1.7K) 329회 다운로드 2008-06-18 09:50:39

본문

로그를 남겨 살펴본 결과 기존에 올려두었던 팁에 하루에 한번 실행이 되지 않는 문제가 있었습니다.
그래서 세션 삭제 내역을 데이터베이스에 저장하여 당일 최초 로그인시 실행되도록 수정하였습니다.

그누보드는 data/session/ 디렉토리에 세션파일이 생성됩니다.
이 파일들은 php 설정에 따라 일정 시간이 지나면 삭제가 되야 하는데
사실 삭제가 안되는 경우가 대부분입니다.

세션 파일들이 오래 쌓이다 보면 디렉토리 안에 파일 갯수가 방대해지고
리눅스 쉘에서 rm -f * 명령어로도 한번에 삭제가 안됩니다.
관리자 메뉴에 세션파일삭제 기능이 들어있지만
관리자가 직접 실행해 줘야 하고 파일이 많을경우 브라우져가 다운되기도 합니다.

가장 좋은 방법이라고 생각한 것은 사용자 로그인시 마다 하루가 지난 세션파일을 삭제하는 것입니다.
관리자가 굳이 신경 쓰지 않아도 자동으로 관리가 되는 것이지요.

방법은 첨부된 파일을 skin/member/basic(사용중인스킨)/ 디렉토리에 업로드하여 덮어씌우시면 됩니다.
만약 login_check.skin.php 파일을 수정하여 사용중이시라면 아래 코드를 추가해주시면 됩니다.

$mw_sess_path = session_save_path();
$mw_cache_time = 86400; // 하루, 초단위 (60*60*24)
$mw_count = 0;
$mw_session_delete_table = "$g4[table_prefix]mw_session_delete";
$sql = "select count(*) as cnt from $mw_session_delete_table where sd_datetime >= '".date("Y-m-d 00:00:00", $g4[server_time])."'";
$qry = sql_query($sql, false);
if (!$qry) { // 테이블 생성
    $table_sql = "create table $mw_session_delete_table (
                  sd_id int auto_increment not null
                  ,mb_id varchar(20) not null
                  ,sd_datetime datetime not null
                  ,sd_delete_count int not null
                  ,primary key(sd_id)
                  ,index(sd_datetime));";
    $qry = sql_query($table_sql, false);
    if ($qry)
        $qry = sql_query($sql);
}
$row = sql_fetch_array($qry);
if (!$row[cnt]) { // 오늘 삭제한 기록이 없으면 세션삭제 실행
    if ($mw_handle = @opendir($mw_sess_path)) {
        while (false !== ($mw_file = @readdir($mw_handle))) {
            if (substr($mw_file, 0, 1) != "." && $mw_file != "index.php") {
                $mw_file = "$mw_sess_path/$mw_file";
                $mw_diff_time = $g4[server_time] - filemtime($mw_file);
                if ($mw_diff_time > $mw_cache_time) {
                    $mw_count++;
                    @unlink($mw_file);
                }
            }
        }
    }
    @closedir($mw_handle);
    $sql = "insert into $mw_session_delete_table set mb_id = '$mb_id', sd_datetime = '$g4[time_ymdhis]', sd_delete_count = '$mw_count'";
    $qry = sql_query($sql); // 삭제내역 기록
}

추천
11

댓글 20개

적용르 해보았습니다.
ftp로 session 폴더를 열어보니 첨엔 파일이 엄청 많더라구요 그렇게 열어두고,
위의 팁을 적용해서 로그인을 했습니다.
하고나서 db를 보니 g4_mw_session_delete  테이블이 생성되어 있네요.
근데 문제인지 제가 잘못안 것인지.. 두개가 있습니다.

1. ftp로 열어놓았던 폴더를 리프레쉬 해도 세션 파일이 그대로 있습니다. 즉 삭제가 되지 않았네요.

2. db에 생성된 해당 테이블의 내용이 한줄도 없습니다.

왜인지.. 궁금해지네요 ^^
불당님이시네요~ ㅎㅎㅎ
안그래도 제 아이디로 로그아웃 후 다시 로그인 해봐도 같구요.
테스트 아이디로 다시 로그인 해봐도 세션 파일은 그대로 있네요...
컴을 즉 IP를 바꿔야 할까요?
제 사이트는 잘 되는데 이상하네요..
FTP 와 관리자 정보를 비밀글로 알려주시면 살펴봐드릴 수 있습니다. ^^;
확인해보니 잘 되고 있습니다.

mysql> select * from g4_mw_session_delete;
+-------+-------+---------------------+-----------------+
| sd_id | mb_id | sd_datetime        | sd_delete_count |
+-------+-------+---------------------+-----------------+
|    1 | nigus | 2008-06-18 14:13:28 |              0 |
+-------+-------+---------------------+-----------------+

하루지난 세션파일이 없네요.
아.... 제 사이트는 방문자가 별로 없어 세션 파일이 그렇게 많지 않다고 생각했었는데.. 사실은 오늘 파일들이었군요.... :)

감사합니다 ^^
전체 0 |RSS
그누4 팁자료실 내용 검색
  • 개별 목록 구성 번호 제목 작성자 작성일 추천 조회
  • 게시물이 없습니다.

회원로그인

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