오래된 세션 파일 자동 삭제 > 그누4 팁자료실

그누4 팁자료실

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

오래된 세션 파일 자동 삭제 정보

오래된 세션 파일 자동 삭제

본문

요새 오래된 세션 파일의 처리문제에 대해 말씀들이 많아서 하나 만들었습니다.

지정된 날짜 이상된 세션 파일을 일괄 자동삭제 하는 방법입니다.

아래의 부분을 복사하여 adm 안에 적당한 이름으로 저장합니다.

<?php

$Ydel_date = 3;//일단위 세팅, 3일 이상 된 것은 삭제
$Ytime = time() - ($Ydel_date * 60 * 60 * 24);
$Ysession_path = session_save_path();
if (!preg_match("`/$`", $Ysession_path)) $Ysession_path .= '/';
$d = dir($Ysession_path);
while (false !== ($entry = $d->read())) {

  if (substr($entry, 0, 1) != '.' && $entry != 'index.php') {

    $session_mtime = filemtime($Ysession_path . $entry);
    if ($Ytime > $session_mtime) unlink($Ysession_path . $entry);
  }
}
$d->close();

?>

관리자모드에서는 항상 인클루드 되는 adm/admin.tail.php 를
에디터로 열어서 다음 라인을 추가하고 저장해 줍니다.

include_once("./자신이 저장한 파일이름");


이렇게 하면 관리자모드를 사용할 때마다 항상 특정일이 지난 세션 파일을 삭제합니다.

만약 관리자마다 실행하고 싶지 않으면
특정파일을 만들어서 메뉴에 추가해도 됩니다.
추천
4
  • 복사

댓글 22개

필요한 팁이면서
간단하고 좋으네요.

감사합니다.

다음버전에서 관리자모드에서 [세션정리] 라고 기본으로 들어갔으면 합니다. _2
관리자페이지의 세션정리 메뉴로 붙였는데 아주 잘 됩니다.....

디비 백업과 함께 그누보드의 기본으로 장착되었으면 좋겠습니다....^^
저는 이런 에러가 나는데요..
Warning: dir(): open_basedir restriction in effect. File(/stmp/) is not within the allowed path(s): (/home/learn:/usr/lib/php:/usr/local/lib/php:/tmp:/usr/local/apache/htdocs/webmail) in /home/learn/public_html/shop/adm/session_delete.php on line 6

Warning: dir(/stmp/): failed to open dir: Operation not permitted in /home/learn/public_html/shop/adm/session_delete.php on line 6

Fatal error: Call to a member function on a non-object in /home/learn/public_html/shop/adm/session_delete.php on line 7
음 저 에러 내용을 보면은

어떠한 연유에서 $Ysession_path = session_save_path();  가 제대로 된 세션 저장 디렉토리 경로를 가져오지 못하는 것 같습니다.

이럴겨우 강제로 패스를 지정해주시면 될듯합니다.
$Ysession_path = '/home/어쩌구 저쩌구/세션디렉토리';
http://www.sir.co.kr/bbs/tb.php/g4_tiptech/5073
 
여기 올려주신 팁을 적용하고 관리자 메뉴에 클릭할 수 있도록 파일로 저장하였습니다.
 
그래서 메뉴에서 클릭을 하면
 
아래와 같은 오류가 뜹니다.
 
Warning: unlink(/tmp/sess_e5c2b22810c4bbfaa20f3f298764496e): Operation not permitted in /home/hosting_users/narang/www/adm/sesout.php on line 12
 
12번째 줄은
if ($Ytime > $session_mtime) unlink($Ysession_path . $entry);
 
입니다.

3일 이내의 세션 말고 실시간 생성된 세션까지 정리 되게 하려면 어떻게 해야 하는지요?

고수님들의 좋은 방법 부탁 드립니다.
G4 버젼에는 관리자 모드에 세션정리가 있지만 게을러서...
유창화님의 팁을 조금 손봤습니다.

*    *    *

다음을 session_delete.php 로 만듭니다.
그 화일을 $g4[path] (최상위 head.php랑 같은데) 에 올립니다.

<?

if ($is_admin == "super") { // 최고 관리자가 로그인 했을때만....

$del_date = 3;//일단위 세팅, 3일 이상 된 것은 삭제
$kill_session_time = time() - ($del_date * 60 * 60* 24);
$kill_session_path = "$g4[path]/data/session";  // 세션이저장된 디렉토리
if (!preg_match("`/$`", $kill_session_path)) $kill_session_path .= '/';
$d = dir($kill_session_path);
while (false !== ($entry = $d->read())) {

  if (substr($entry, 0, 1) != '.' && $entry != 'index.php') {

$session_mtime = filemtime($kill_session_path . $entry);
if ($kill_session_time > $session_mtime) unlink($kill_session_path . $entry);
  }
}
$d->close();

}

?>

tail.php의 끝부분을 다음과 같이 처리 합니다.

<?
include_once("$g4[path]/tail.sub.php");
include_once("$g4[path]/session_delete.php"); // 요부분을 추가 합니다.
?>
© SIRSOFT
현재 페이지 제일 처음으로