#466 Context class에서 로그인유무 확인후 매번 세션 정보를 새로 갱신하도록 하여 로그인된 회원의 현 정보를 제대로 운영할 수 있도록 코드 변경

git-svn-id: http://xe-core.googlecode.com/svn/sandbox@4159 201d5d3c-b55e-5fd7-737f-ddc643e51545
This commit is contained in:
zero 2008-04-29 02:32:06 +00:00
parent aa0c4957ad
commit e6a19417ff
4 changed files with 39 additions and 53 deletions

View file

@ -109,24 +109,23 @@
$this->_setRequestArgument();
$this->_setUploadedArgument();
// 인증관련 데이터를 Context에 설정
$oMemberModel = &getModel('member');
// 로그인되어 있지 않고 자동로그인 키값이 있으면 자동 로그인 체크
if(Context::isInstalled() && !$oMemberModel->isLogged() && $_COOKIE['xeak']) {
// 인증 관련 정보를 Context와 세션에 설정
if(Context::isInstalled()) {
// 인증관련 데이터를 Context에 설정
$oMemberModel = &getModel('member');
$oMemberController = &getController('member');
$oMemberController->doAutologin();
}
// 로그인되어 있으면 로그인 정보 기록
if($oMemberModel->isLogged()) {
$this->_set('is_logged', true);
$this->_set('logged_info', $_SESSION['logged_info']);
// 인증이 되어 있을 경우 유효성 체크
if($oMemberModel->isLogged()) {
$oMemberController->setSessionInfo();
// 로그인 되어 있지 않으면 먼저 자동 로그인을 체크 비로그인 상태 기록
} else {
$this->_set('is_logged', false);
$this->_set('logged_info', NULL);
// 인증이 되어 있지 않을 경우 자동 로그인 확인
} elseif($_COOKIE['xeak']) {
$oMemberController->doAutologin();
}
$this->_set('is_logged', $oMemberModel->isLogged() );
$this->_set('logged_info', $oMemberModel->getLoggedInfo() );
}
// rewrite 모듈사용 상태 체크

View file

@ -775,9 +775,6 @@
// user_id 에 따른 정보 가져옴
$member_info = $oMemberModel->getMemberInfoByMemberSrl($args->member_srl);
// 사용자의 전용 메뉴 구성
$member_info->menu_list = $this->getMemberMenuList();
// 로그인 성공후 trigger 호출 (after)
$trigger_output = ModuleHandler::triggerCall('member.doLogin', 'after', $member_info);
if(!$trigger_output->toBool()) return $trigger_output;
@ -1168,8 +1165,7 @@
if ($output->data->is_register == 'Y') {
$args->password = $output->data->new_password;
$args->denied = 'N';
}
else {
} else {
$args->password = md5($output->data->new_password);
unset($args->denied);
}
@ -1186,9 +1182,6 @@
// 회원의 정보를 가져옴
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
// 사용자의 전용 메뉴 구성
$member_info->menu_list = $this->getMemberMenuList();
// 로그인 성공후 trigger 호출 (after)
$trigger_output = ModuleHandler::triggerCall('member.doLogin', 'after', $member_info);
if(!$trigger_output->toBool()) return $trigger_output;
@ -1309,15 +1302,12 @@
}
// denied_date가 현 시간보다 적으면 알림
if($member_info->limit_date && $member_info->limit_date >= date("Ymd")) return new Object(-1,sprintf(Context::getLang('msg_user_limited'),zdate($member_info->limit_date,"Y-m-d")));
if($member_info->limit_date && substr($member_info->limit_date,0,8) >= date("Ymd")) return new Object(-1,sprintf(Context::getLang('msg_user_limited'),zdate($member_info->limit_date,"Y-m-d")));
// 사용자 정보의 최근 로그인 시간을 기록
$args->member_srl = $member_info->member_srl;
$output = executeQuery('member.updateLastLogin', $args);
// 사용자의 전용 메뉴 구성
$member_info->menu_list = $this->getMemberMenuList();
// 로그인 성공후 trigger 호출 (after)
$trigger_output = ModuleHandler::triggerCall('member.doLogin', 'after', $member_info);
if(!$trigger_output->toBool()) return $trigger_output;
@ -1329,9 +1319,7 @@
$autologin_args->member_srl = $member_info->member_srl;
executeQuery('member.deleteAutologin', $autologin_args);
$autologin_output = executeQuery('member.insertAutologin', $autologin_args);
if($autologin_output->toBool()) {
setCookie('xeak',$autologin_args->autologin_key, time()+60*60*24*365, '/');
}
if($autologin_output->toBool()) setCookie('xeak',$autologin_args->autologin_key, time()+60*60*24*365, '/');
}
$this->setSessionInfo($member_info);
@ -1339,24 +1327,30 @@
return $output;
}
/**
* @brief 로그인 사용자의 전용 메뉴를 구성
**/
function getMemberMenuList() {
$menu_list['dispMemberInfo'] = 'cmd_view_member_info';
$menu_list['dispMemberFriend'] = 'cmd_view_friend';
$menu_list['dispMemberMessages'] = 'cmd_view_message_box';
$menu_list['dispMemberScrappedDocument'] = 'cmd_view_scrapped_document';
$menu_list['dispMemberSavedDocument'] = 'cmd_view_saved_document';
$menu_list['dispMemberOwnDocument'] = 'cmd_view_own_document';
return $menu_list;
}
/**
* @brief 세션 정보 갱싱 또는 생성
**/
function setSessionInfo($member_info) {
if(!$member_info->member_srl) return;
function setSessionInfo($member_info = null) {
$oMemberModel = &getModel('member');
// 사용자 정보가 넘어오지 않았다면 현재 세션 정보에서 사용자 정보를 추출
if(!$member_info && $_SESSION['member_srl'] && $oMemberModel->isLogged() ) {
$member_info = $oMemberModel->getMemberInfoByMemberSrl($_SESSION['member_srl']);
// 회원정보가 없다면 세션 파기
if($member_info->member_srl != $_SESSION['member_srl']) {
$this->destroySessionInfo();
return;
}
}
// 사용자의 전용 메뉴 구성 (이 메뉴는 애드온등으로 변경될 수 있음)
$member_info->menu_list['dispMemberInfo'] = 'cmd_view_member_info';
$member_info->menu_list['dispMemberFriend'] = 'cmd_view_friend';
$member_info->menu_list['dispMemberMessages'] = 'cmd_view_message_box';
$member_info->menu_list['dispMemberScrappedDocument'] = 'cmd_view_scrapped_document';
$member_info->menu_list['dispMemberSavedDocument'] = 'cmd_view_saved_document';
$member_info->menu_list['dispMemberOwnDocument'] = 'cmd_view_own_document';
// 오픈아이디인지 체크 (일단 아이디 형식으로만 결정)
if(preg_match("/^([0-9a-z]+)$/is", $member_info->user_id)) $member_info->is_openid = false;

View file

@ -84,7 +84,7 @@
</tr>
<tr>
<td class="red"><!--@if($val->is_admin != 'Y')--><a href="{getUrl('act','dispMemberAdminDeleteForm','member_srl', $val->member_srl)}">{$lang->cmd_delete}</a><!--@else--><img src="./images/icon_management.gif" title="{$lang->is_admin}" alt="{$lang->is_admin}" /><!--@end--></td>
<td colspan="2">{$val->group_list}</td>
<td colspan="2">{$val->group_list}&nbsp;</td>
<td>
<!--@if($val->homepage)--><a href="{$val->homepage}" class="homepage" onclick="window.open(this.href);return false;"><img src="./images/icon_homepage.gif" title="{$lang->homepage}" alt="{$lang->homepage}" /></a> <!--@end-->
<!--@if($val->blog)--><a href="{$val->blog}" class="blog" onclick="window.open(this.href);return false;"><img src="./images/icon_blog.gif" title="{$lang->blog}" alt="{$lang->blog}" /></a> <!--@end-->&nbsp;

View file

@ -422,13 +422,6 @@
$new_group_args->member_srl = $member_srl;
$new_group_args->group_srl = $current_group_srl;
$new_group_output = executeQuery('member.addMemberToGroup', $new_group_args);
// 만약 대상 사용자와 로그인 사용자의 정보가 동일하다면 세션을 변경해줌
$logged_info = Context::get('logged_info');
if($logged_info->member_srl == $member_srl) {
$member_info = $oMemberModel->getMemberInfoByMemberSrl($member_srl);
$_SESSION['logged_info']->group_list = $member_info->group_list;
}
}
}