웹마스터 팁

php열고
//행복한고니님의 따끔한 조언을 바탕으로 약간 수정했습니다.
//이걸 만들어 놓고 보니 왜 만들었는지 모르겟네요..;;
//고수님들의 조언 부탁드리며..;;
//설명 몇자를 적습니다.
//
//우선 세션저장하실때 맨 마지막에 time()을 저장해주세요..
//ex)sid|s:32:"5e58d0b6166ddbb747452e5ba26c251c";time|i:1052703596;
//그리고 session_save_path("경로");를 정해주세요.
//저는 "data/__SessionTMP" 이렇게 정해놨습니다.
//그리고 실행하시면 되는데요..;;
//
//
$dirhandle = opendir("data/__SessionTMP");//세션저장 디렉토리 핸들얻기.

while($filename = readdir($dirhandle)){//얻은 핸들을 이용해서 디렉토리안의 파일/서브디렉토리 읽어와서 리스트로 뿌림.
$filepath = "data/__SessionTMP/".$filename;//얻은 파일이름앞에 세션디렉토리 붙여 완전한 패스를 만듬.
$filesize = filesize($filepath);//파일의 사이즈를 체크함.

        if($filesize == 0 && ($filename != "." && $filename !="..")){//파일크기가 0 bytes이고 파일이름에 "."이나 ".."이 아닌 파일만 ↓(아랫줄 설명)
                unlink($filepath);//파일만 삭제함.(한마디로..파일크기 0인 세션파일을 삭제한다는 소린데요..;; 저 같은 경우..홈 접속시 무조건 세션파일이 생성되서 로그인 안하시는분들이 파일크기 0인 세션파일들이 마니 남아서 이런방법을 섰습니다. 리로드란표현을 잘못 써서..;; 행복한고니님한테 따꿈한 한마디 듣고..다시 수정했습니다.;;)
        }else if($filename != "." && $filename !=".."){//이건..파일크기가 0이 아닌것만 체크하는 if문..;;
                $line = file($filepath);//파일크가 0이 아닌 파일의 내용을 읽어옴.
                while(list($key,$val) = each($line)){//라인별루 뿌리는 건데..;; 세션은 라인 한줄로 만들어지져? ;;; 이건 별루 필요 없는거 라는 생각이..;; 대충 넘어가고..;;
                        $temp=explode(":",$val);//하턴 가지고온 라인값을 ":"로 구분해서..
                        $timepoint=count($temp)-1;//맨 마지막 ":"의 뒷부분을 가져옴..(세션저장하실때 맨 마지막에 time()를 넣주셔야..;;
                        $timecheck=$temp[$timepoint];//그 뒷부분 값을 $timecheck에 저장.
                        $temp=explode(";",$timecheck);//세션저장시 항목별 저장값의 맨 마지막에 붙는 ";"를 체크해서
                        if(!eregi(""",$temp[0])){// ";"이거 앞의 숫자(time값)만 뽑아옴.
                                $checkdate = $temp[0];//그 값을 $checkdate 에 저장
                                if($checkdate+(60*60*12) < time()){//$checkdate값에 반나절을 더한 값이 현재시간보다 작으면
                                        unlink($filepath);//파일 지움..
                                }
                        }
        
                }
        
        }
}
closedir($dirhandle);//세션저장 디렉토리 핸들닫기
//
//아...만들어 놓고 보니..왜 만들었는지..몰겠따..;;
//
//이거 어디에 필요할까요? -0-;; 냠..-0-;;
//
//구람..즐거운 하루 되세요~~
//
//p.s: 그리고 php.ini를 보면 maxlifetime를 통해서도 삭제가 가능합니다.
//
//       행복한고니님이 말씀하신 session_set_save_handler()를 통해서도 가능합니다.
//
//       아래의 예를 보시기 바랍니다. 출처는 kr.php.net입니다.
//      
//       그리고 제로보드 암만 뒤져도..;; session_set_save_handler() 이고 안보여염..;; 에혀..;;
//
//       그리고..;; 암만 뒤져봐도..세션파일 앞에 파일명 정해주는것은 모르겠네염..;; 머리가 안저아서..;;php닫고

예 1. session_set_save_handler() example

function open ($save_path, $session_name) {
  global $sess_save_path, $sess_session_name;
      
  $sess_save_path = $save_path;
  $sess_session_name = $session_name;
  return(true);
}

function close() {
  return(true);
}

function read ($id) {
  global $sess_save_path, $sess_session_name;

  $sess_file = "$sess_save_path/sess_$id";
  if ($fp = @fopen($sess_file, "r")) {
    $sess_data = fread($fp, filesize($sess_file));
    return($sess_data);
  } else {
    return("");
  }

}

function write ($id, $sess_data) {
  global $sess_save_path, $sess_session_name;

  $sess_file = "$sess_save_path/sess_$id";
  if ($fp = @fopen($sess_file, "w")) {
    return(fwrite($fp, $sess_data));
  } else {
    return(false);
  }

}

function destroy ($id) {
  global $sess_save_path, $sess_session_name;
      
  $sess_file = "$sess_save_path/sess_$id";
  return(@unlink($sess_file));
}

/*********************************************
* WARNING - You will need to implement some *
* sort of garbage collection routine here.  *
*********************************************/
function gc ($maxlifetime) {
  return true;
}

session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");

session_start();

// proceed to use sessions normally

아..생각 나따..-0-;;

원래 만들려던 목적에서 벗어 났네요..;;

로그인시 세션저장하는 값중 id값을 입력해서..

세션저장된 값에 id가 있는거면 하루정도 나두고..

id값이 없는 세션은 과감하게 팍팍 지워버린다는..;;

이런걸 만들려고 했는데..;;

아~~~~~~~ 모르겠다..-0-;;

그리고...중복로그인 방지에 관한 좋은 조언즘 부탁드립니다..;;

유용한 정보가 있는곳이라도요..;; 흑흑~~