묻고답하기
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
로그인 시 ID와 닉네임을 쿠키로 생성하려면
2007.10.28 16:39
제목 그대로 로그인 시 ID와 닉네임을 쿠키로 생성하려면 어떻게 해야 하나요?
어떤 파일에 소스를 추가해야 하는지요?
쿠키로 생성된 쿠키는 어떻게 출력해야 하나요?
너무 기초적인 질문을 드려서 죄송합니다.
어떤 파일에 소스를 추가해야 하는지요?
쿠키로 생성된 쿠키는 어떻게 출력해야 하나요?
너무 기초적인 질문을 드려서 죄송합니다.
댓글 4
-
핑크플로이드
2007.10.29 03:25
-
必得力
2007.10.29 14:41
답변 감사합니다.
복 받으실거예요. -
必得力
2007.10.31 01:42
알려주신 방법으로 잘 적용하였습니다. 다시 한번 감사드립니다.
선생님께서 알려주신 방법에는 문제가 없지만, 또 다른 문제에 부디치게 되었습니다.
PHP에서 쿠키를 생성 후에 자바스크립트에서 쿠키를 불러오면 저장된 쿠키값 중 영문과 숫자를 제외한 값들이 모두 깨져서 보인다는 것입니다.
원인을 분석해 보니 PHP에서 UFT-8 형식으로 쿠키를 저장되고 자바스크립트에서 UTF-12(?) 형식으로 불러오니 깨질 수 밖에 없었습니다.
어제 밤새도록 해결방법을 찾았지만 미천한 실력으로 도저히 모르겠더라구요.ㅠㅠ
해결방법이 없을까요? 다시 한번 도움을 부탁드립니다. -
必得力
2008.02.26 02:34
해결되었습니다.
감사합니다.
방법은 몇가지 있습니다...
1. 로그인 위젯에서 쿠키생성.
2. 인증관련 데이터를 Context에 설정하는 부분에서 쿠키생성.
3. 로그인, 로그아웃 컨트롤 부분에서 쿠키생성.
1, 2번은 로그인 또는 로그아웃 후에 refresh를 해줘야 쿠키가 뜨거나 삭제되는 문제가 있습니다...
결국 3번에서 처리해서 페이지를 redirection 해줘야 뭔가 그럴듯하게 보이겠죠...
그럼 ZBXE에서 로그인/로그아웃을 실제로 처리하는 부분은 어디냐...하면요...
/zbxe/modules/member/member.controller.php
입니다...
이 파일의 126번째 라인 function procMemberLogout() 하고...
1097번째 라인의 function setSessionInfo($member_info) 에서 쿠키를 구워주면 되는거죠...
예제입니다.
쿠키 생성
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;
$_SESSION['is_logged'] = true;
$_SESSION['ipaddress'] = $_SERVER['+ 'REMOTE_ADDR'];
$_SESSION['member_srl'] = $member_info->member_srl;
$_SESSION['is_admin'] = false;
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);
}
쿠키 삭제
$this->destroySessionInfo();
@setcookie('nick_name', '', time()-60*60*24, '/');
@setcookie('user_id', '', time()-60*60*24, '/');
return new Object();
}
빨간색만 넣어주세요.
로그인은 원래 doLogin 부분에서 처리해야하는데...
저기서만 처리하면 로그인 했을때 쿠키가 구워지긴 하는데...
회원정보 수정시에 쿠키가 갱신이 안되는 문제가 생기죠...
그래서 그냥 아예 세션처리하는 부분에서 해준겁니다...
로그인/수정...등등...
모두 여기를 공통으로 거치거든요...