[SCRAP] 로그인 시 ID와 닉네임을 쿠키로 생성하려면
1. 로그인 위젯에서 쿠키생성.
2. 인증관련 데이터를 Context에 설정하는 부분에서 쿠키생성.
3. 로그인, 로그아웃 컨트롤 부분에서 쿠키생성.
1, 2번은 로그인 또는 로그아웃 후에 refresh를 해줘야 쿠키가 뜨거나 삭제되는 문제가 있습니다...
결국 3번에서 처리해서 페이지를 redirection 해줘야 뭔가 그럴듯하게 보이겠죠...
그럼 ZBXE에서 로그인/로그아웃을 실제로 처리하는 부분은 어디냐...하면요...
/zbxe/modules/member/member.controller.php
입니다...
이 파일의 126번째 라인 function procMemberLogout() 하고...
1097번째 라인의 function setSessionInfo($member_info) 에서 쿠키를 구워주면 되는거죠...
예제입니다.
쿠키 생성
function setSessionInfo($member_info) {
if(!$member_info->member_srl) return;
if(!$member_info->member_srl) return;
// 오픈아이디인지 체크
if(eregi("^([0-9a-z]+)$", $member_info->user_id)) $member_info->is_openid = false;
else $member_info->is_openid = true;
if(eregi("^([0-9a-z]+)$", $member_info->user_id)) $member_info->is_openid = false;
else $member_info->is_openid = true;
// 로그인 처리
$_SESSION['is_logged'] = true;
$_SESSION['ipaddress'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['member_srl'] = $member_info->member_srl;
$_SESSION['is_admin'] = false;
$_SESSION['is_logged'] = true;
$_SESSION['ipaddress'] = $_SERVER['REMOTE_ADDR'];
$_SESSION['member_srl'] = $member_info->member_srl;
$_SESSION['is_admin'] = false;
unset($member_info->password);
// 사용자 그룹 설정
if($member_info->group_list) {
$group_srl_list = array_keys($member_info->group_list);
$_SESSION['group_srls'] = $group_srl_list;
if($member_info->group_list) {
$group_srl_list = array_keys($member_info->group_list);
$_SESSION['group_srls'] = $group_srl_list;
// 관리자 그룹일 경우 관리자로 지정
$oMemberModel = &getModel('member');
$admin_group = $oMemberModel->getAdminGroup();
if($admin_group->group_srl && in_array($admin_group->group_srl, $group_srl_list)) $_SESSION['is_admin'] = true;
}
// 세션에 로그인 사용자 정보 저장
foreach($member_info as $key => $val) {
$_SESSION['logged_info']->{$key} = $val;
}
@setcookie('nick_name', $_SESSION['logged_info']->nick_name, time()+60*60*24, '/');
@setcookie('user_id', $_SESSION['logged_info']->user_id, time()+60*60*24, '/');
Context::set('is_logged', true);
Context::set('logged_info', $member_info);
}
$oMemberModel = &getModel('member');
$admin_group = $oMemberModel->getAdminGroup();
if($admin_group->group_srl && in_array($admin_group->group_srl, $group_srl_list)) $_SESSION['is_admin'] = true;
}
// 세션에 로그인 사용자 정보 저장
foreach($member_info as $key => $val) {
$_SESSION['logged_info']->{$key} = $val;
}
@setcookie('nick_name', $_SESSION['logged_info']->nick_name, time()+60*60*24, '/');
@setcookie('user_id', $_SESSION['logged_info']->user_id, time()+60*60*24, '/');
Context::set('is_logged', true);
Context::set('logged_info', $member_info);
}
쿠키 삭제
function procMemberLogout() {
$this->destroySessionInfo();
@setcookie('nick_name', '', time()-60*60*24, '/');
@setcookie('user_id', '', time()-60*60*24, '/');
return new Object();
}
$this->destroySessionInfo();
@setcookie('nick_name', '', time()-60*60*24, '/');
@setcookie('user_id', '', time()-60*60*24, '/');
return new Object();
}
빨간색만 넣어주세요.
로그인은 원래 doLogin 부분에서 처리해야하는데...
저기서만 처리하면 로그인 했을때 쿠키가 구워지긴 하는데...
회원정보 수정시에 쿠키가 갱신이 안되는 문제가 생기죠...
그래서 그냥 아예 세션처리하는 부분에서 해준겁니다...
로그인/수정...등등...
모두 여기를 공통으로 거치거든요...
Source: 지식인, http://www.xpressengine.com/15944240