웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
세션파일 크기/만들어진 시간체크해서 정해진 시간이후엔 파일 지우기?;; (라고 써야되낭? ;;)
2003.05.12 10:49
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-;;
그리고...중복로그인 방지에 관한 좋은 조언즘 부탁드립니다..;;
유용한 정보가 있는곳이라도요..;; 흑흑~~
//행복한고니님의 따끔한 조언을 바탕으로 약간 수정했습니다.
//이걸 만들어 놓고 보니 왜 만들었는지 모르겟네요..;;
//고수님들의 조언 부탁드리며..;;
//설명 몇자를 적습니다.
//
//우선 세션저장하실때 맨 마지막에 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-;;
그리고...중복로그인 방지에 관한 좋은 조언즘 부탁드립니다..;;
유용한 정보가 있는곳이라도요..;; 흑흑~~
댓글 6
-
행복한고니
2003.05.12 12:24
제로보드 용인 것 같은데요?? 아닌가? -
다오케이
2003.05.12 12:51
그런가요? 제로보드용인가요?..;;
혹시 이거때문에?? "data/__SessionTMP" 그렇게 느끼신건지요..??
저장폴더는 확실히 배껴씀..ㅠ,.ㅜ;;
제로보드 세션저장한는 곳은 요기져..;; "data/__zbSessionTMP" ㅜ,.ㅠ;;
그리고..제로보드 함수 마니 가따 쓰거든여..ㅠ,.ㅜ;;
바로 걸리따..ㅋㅋ..텨텨텨~~ <ㅑㅇ~ -
행복한고니
2003.05.12 14:10
제로보드 용이라고 한데는 또 다른 이유도 있어요.
설마 세션 파일이 다른 곳에서도 sess 로 시작할 것이라고 생각하신 것은 아니죠?
세션 생성후 /tmp 디렉토리를 보세요. 님이 원하는 대로 세션 파일이 생성되어있나요?
세션을 다루려면 session_save_path 함수로 저장할 곳을 정해줘야하고 자신이 원하는 일정한 형식으로 저장하려면 session_set_save_handler 를 써서 각각의 경우에 따른 함수를 지정해줘야 하는데.. 그런건 감안하셨나요? 제로보드를 조금 더 분석해보세요. session_set_save_handler 함수나 session_save_path 함수를 쓴 곳이 존재합니다.
그런것이 수반되지 않는 한,이 팁은 아무런 소용도 필요도 없는 팁이 됩니다.
제가 보기엔 세션에 대한 개념도 제대로 안 서신 것 같은데요... 바로 이 부분 때문입니다.
"저 같은 경우..리로드 할때마다 세션이 생성되니..지워도 상관없어서..;;"
정확하게 말하면 세션을 잘못쓰셨거나 세션 파일을 삭제하셨기 때문에 리로드 할때마다 생기는 겁니다. -_-;;
추가로 말씀드리자면, PHP 매뉴얼 93장의 Session handling functions 라는 부분을 잘 읽어보시면 제 말이 어떤 의미인지 알게 될 겁니다. 또하나, php.ini 의 설정에서 session 의 timeout 시간을 정해줄 수 있도록 되어있습니다. 일정한 시간이 지나면 세션이 destroy 되는거죠.
위에서 말씀드린 것을 같이 싣지 않는다면 이 글은 팁으로서의 효력을 잃은 글이 됩니다. 삭제함이 옳습니다. -
다오케이
2003.05.12 15:07
효력을 않잃기 위해서..;; -
행복한고니
2003.05.12 15:41
다오케이// 수고하셨습니다. 그런데 제로보드와 다를 게 없네요. ㅡ_ㅡ;;
세션 파일명 정해주는 것은 세션을 저장하는 함수 즉, write 를 잘 보시면 있습니다. -
다오케이
2003.05.12 15:48
행복한고니//제로보드에 저런거 있나요? ;;; 앗~~ 표절이 되는건가?..;;;
책도 뒤적거리면서..몇몇함수들을 찾아가며..;;; 했건만..~~
조언 감사드립니다.~,.~;;
제목 | 글쓴이 | 날짜 |
---|---|---|
htmlspecialchars 사용하시는 분들 [5] | holies | 2003.07.11 |
이미 인클루드된 파일은 다시 인클루드하지 않기 [14] | 김병희 | 2003.06.20 |
PHP 익히기 3 [11] | 구리구리 | 2003.06.17 |
PHP 익히기 2 [9] | 구리구리 | 2003.06.10 |
PHP 익히기 1 [24] | 구리구리 | 2003.06.09 |
php 로 기존 문서 포함시키기 [10] | 이성헌 | 2003.06.08 |
체크박스등으로 배열로 변수를 넘길때.. [1] | myself2 | 2003.06.06 |
홈페이지의 내용을 DB에 담기 [15] | 세죠위그이 | 2003.05.30 |
썸네일 자동생성하고 이미지 사이즈 자동 줄이기... [6] | sMokaHallo | 2003.05.21 |
Wake On Lan 기능 사용하기... [3] | sMokaHallo | 2003.05.17 |
스킨 시스템 구축.(1탄 읽어오기) [11] | 씨파개 | 2003.05.13 |
none 과 null 처리 문제 해결법 [5] | 허현승 | 2003.05.12 |
세션파일 크기/만들어진 시간체크해서 정해진 시간이후엔 파일 지우기?;; (라고 써야되낭? ;;) [6] | 다오케이 | 2003.05.12 |
PHP+MSSQL?(수정판) [11] | 씨파개 | 2003.05.10 |
이미지 전용 파일업로드시의 확장자 체크시.. [4] | 특급잠수부 | 2003.05.07 |
mysql_fetch_row n mysql_fetch_array n mysql_fetch_object [4] | sMokaHallo | 2003.05.06 |
if 시리즈 2탄.. ㅡㅡ;; [9] | 씨파개 | 2003.05.05 |
PHP 확장 함수를 이용한 exif 정보 출력 [1] | NoSoRi | 2003.04.30 |
if 시리즈 1탄! [15] | 씨파개 | 2003.04.28 |
ID3v1태그 읽는 함수입니다. [4] | 김승태 | 2003.04.27 |