회원 탈퇴와 삭제의 차이
그누보드는 회원 탈퇴와 관련된 파일은 있지만 탈퇴 링크는 없어서 별도로 추가해야 합니다.
http://gnustudy.com/bbs/board.php?bo_table=skin_etc&wr_id=16
영카트는 마이페이지에 회원 탈퇴 버튼이 기본으로 있습니다.
1. 회원 탈퇴
bbs/member_leave.php 파일을 통해 탈퇴 처리됩니다.
해당 파일을 살펴보니 탈퇴하면 회원 정보 mb_leave_date 필드에 현재 날짜를 기록하고 있네요.
// 회원탈퇴일을 저장
$date = date("Ymd");
$sql = " update {$g5['member_table']} set mb_leave_date = '{$date}' where mb_id = '{$member['mb_id']}' ";
sql_query($sql);
그리고 로그인할 때 bbs/login_check.php 파일에서 mb_leave_date 필드 값을 체크해서 로그인을 차단합니다.
// 탈퇴한 아이디인가?
if ($mb['mb_leave_date'] && $mb['mb_leave_date'] <= date("Ymd", G5_SERVER_TIME)) {
$date = preg_replace("/([0-9]{4})([0-9]{2})([0-9]{2})/", "\\1년 \\2월 \\3일", $mb['mb_leave_date']);
alert('탈퇴한 아이디이므로 접근하실 수 없습니다.\n탈퇴일 : '.$date);
}
탈퇴한 회원이 로그인을 시도하면 아래와 같은 알림 메시지가 출력됩니다.
탈퇴를 했더라도 회원 개인 정보는 즉시 삭제되지 않습니다.
개인 정보 삭제는 탈퇴 이후 회원 삭제 과정으로 넘어가야 처리됩니다.
탈퇴 후 별도로 설정된 기간이 경과하면 회원 삭제 과정으로 자동으로 넘어갑니다.
기간 설정은 관리자 페이지 > 환경설정 > 기본환경설정 > 회원탈퇴후 삭제일에서 변경할 수 있습니다.
기본 값은 30일로 되어 있네요.
30일 이후에 삭제하는 실행 코드는 bbs/db_table.optimize.php 파일에 있습니다.
// 탈퇴회원 자동 삭제
if($config['cf_leave_day'] > 0) {
$sql = " select mb_id from {$g5['member_table']}
where (TO_DAYS('".G5_TIME_YMDHIS."') - TO_DAYS(mb_leave_date)) > '{$config['cf_leave_day']}'
and mb_memo not regexp '^[0-9]{8}.*삭제함' ";
$result = sql_query($sql);
while ($row=sql_fetch_array($result))
{
// 회원자료 삭제
member_delete($row['mb_id']);
}
}
* 유의사항
자동 삭제의 문제점이 있는데 온전한 자동 삭제는 아니고 관리자가 로그인을 해야 자동 삭제 파일이 실행됩니다.
설정 날짜가 지났는데 삭제가 안 된다면 관리자 로그인을 했었는지 확인해보세요.
관리자가 주기적으로 사이트에 로그인도 하지 않고 방치하면 위 자동 삭제 코드는 실행되지 않습니다.
Cron 처럼 작동하지 않고 관리자가 로그인을 해야 실행되는 점 유의하세요.
관리자가 당일 사이트에 첫 로그인했을 때 규모가 큰 사이트라면 약간의 딜레이가 생길 수가 있는데
그 원인 중 하나가 bbs/db_table.optimize.php 파일에 있는 자동 삭제 처리 때문입니다.
해당 파일 내용을 살펴보면 여러 정보들이 일괄 삭제 처리됩니다.
로그인할 때마다 실행되진 않고 하루 한 번 첫 로그인할 때만 실행됩니다.
30일 이전에 관리자 페이지 > 해당 회원 정보 수정 페이지에서
탈퇴일자 입력 값을 삭제하고 빈 값으로 수정하면 탈퇴는 취소되고 정상 회원으로 즉시 복구됩니다.
(유의사항 : 기간이 지나서 이미 삭제된 회원은 복구 불가능합니다.)
탈퇴 후 30일이 지나서 회원 정보가 삭제된 회원이 로그인을 시도하면 아래와 같은 알림 메시지가 출력됩니다.
30일 이전에는 탈퇴 날짜가 출력됐었는데 이제 그런 정보는 나오지 않습니다.
2. 회원 삭제
탈퇴 과정에서는 유예 기간이 있었지만 회원 삭제는 즉시 삭제 처리됩니다.
즉시 삭제는 회원 관리 페이지에서 관리자만 할 수 있습니다.
(탈퇴 후 30일이 경과된 회원들도 동일하게 아래 함수로 자동 삭제 처리됩니다.)
회원 삭제와 관련된 함수는 lib/common.lib.php 파일에 있습니다.
// 회원 삭제
function member_delete($mb_id)
.......................
// 회원자료는 정보만 없앤 후 아이디는 보관하여 다른 사람이 사용하지 못하도록 함 : 061025
$sql = " update {$g5['member_table']} set mb_password = '', mb_level = 1, mb_email = '', mb_homepage = '', mb_tel = '', mb_hp = '', mb_zip1 = '', mb_zip2 = '', mb_addr1 = '', mb_addr2 = '', mb_birth = '', mb_sex = '', mb_signature = '', mb_memo = '".date('Ymd', G5_SERVER_TIME)." 삭제함\n{$mb['mb_memo']}' where mb_id = '{$mb_id}' ";
보관되는 정보 : 회원아이디, 이름, 닉네임, 회원가입일, 최근접속일, 가입당시 IP, 탈퇴일자
삭제 함수 내용을 세부적으로 살펴보면 회원 아이디는 다른 사람이 재사용 못하게 남겨두고 있습니다.
레벨은 1로 바뀌고 아이디, 이름, 닉네임을 제외한 정보들은 모두 빈 값으로 변경됩니다.
그리고 mb_memo 필드에 '삭제한 날짜와 삭제함' 문구가 기록됩니다.
아이디는 남겨두기 때문에 회원 목록 페이지에서는 삭제되지 않습니다.
만약 회원 목록에서도 나오지 않게 완전히 삭제하려면 위 함수를 이렇게 수정하면 됩니다.
http://gnustudy.com/bbs/board.php?bo_table=gnu_tip&wr_id=104
일반 회원들의 아이디는 가급적 완전히 삭제하지 마시고 테스트 회원이나 스팸 회원들 삭제할 때 사용하면 될 것 같습니다.
부가적으로 회원 삭제 시 아래 내용들도 같이 삭제됩니다.
포인트, 쪽지, 스크랩 등이 포함되어 있습니다.
// 포인트 테이블에서 삭제
sql_query(" delete from {$g5['point_table']} where mb_id = '$mb_id' ");
// 그룹접근가능 삭제
sql_query(" delete from {$g5['group_member_table']} where mb_id = '$mb_id' ");
// 쪽지 삭제
sql_query(" delete from {$g5['memo_table']} where me_recv_mb_id = '$mb_id' or me_send_mb_id = '$mb_id' ");
// 스크랩 삭제
sql_query(" delete from {$g5['scrap_table']} where mb_id = '$mb_id' ");
// 관리권한 삭제
sql_query(" delete from {$g5['auth_table']} where mb_id = '$mb_id' ");
// 그룹관리자인 경우 그룹관리자를 공백으로
sql_query(" update {$g5['group_table']} set gr_admin = '' where gr_admin = '$mb_id' ");
// 게시판관리자인 경우 게시판관리자를 공백으로
sql_query(" update {$g5['board_table']} set bo_admin = '' where bo_admin = '$mb_id' ");
//소셜로그인에서 삭제 또는 해제
if(function_exists('social_member_link_delete')){
social_member_link_delete($mb_id);
}
// 아이콘 삭제
@unlink(G5_DATA_PATH.'/member/'.substr($mb_id,0,2).'/'.$mb_id.'.gif');
// 프로필 이미지 삭제
@unlink(G5_DATA_PATH.'/member_image/'.substr($mb_id,0,2).'/'.$mb_id.'.gif');