XpressEngine과 관련된 팁이나 강좌를 소개하는 게시판입니다.
자신이 생각하기에는 아주 사소한 내용이라도 누군가에게는 큰 도움이 될 수 있습니다.
XE 원 소스 코드를 수정하는 팁은 당장은 도움이 될지 몰라도 결국 XE 업그레이드를 하지 못하게 되니 팁을 올리시는 분이나 팁을 적용하시는 분이나 모두 주의 부탁드립니다.
원래 만들어서 쓰던 프로그램이 있는데 zbxe와 연동하려고 찾아보니, 질문만 있고 답변이 없더군요.
간단하게 만들어봤습니다.
세션만 불러오기 때문에 0.0002초만 실행시간에 추가 됩니다.
zbxe를 사용하는 중이라는 가정하에 이미 생겨 있을 session 폴더 생성 부분은 빼버렸습니다.
zbxe는 /home/hosting_users/mytravian/www/ 에 설치되어 있고, 외부프로그램은 /home/hosting_users/mytravian/www/mt/ 에 존재하고 있습니다.
저같은 경우 회원 추가정보로 타 사이트의 ID와 Password를 받고, 이 값으로 타 사이트의 화면을 긁어오는데 씁니다.
외부 프로그램의 맨 윗줄에 다음과 같이 추가합니다.
$zbxe_server_path = "/home/hosting_users/mytravian/www/"; // 관리자 페이지에 설치된 경로 부분
$zbxe_url_path = "http://mytravian.net/"; // zbxe가 설치된 URL
if(!ini_get('session.auto_start')) {
session_cache_limiter('no-cache, must-revalidate');
ini_set("session.gc_maxlifetime", "18000");
if(is_dir($zbxe_server_path."files/sessions")) session_save_path($zbxe_server_path."files/sessions/");
session_start();
}
if(!$is_logged){
Header("Location:{$zbxe_url_path}?mid=outlogin&act=dispMemberLoginForm"); // 로그인 화면으로 이동
exit(1);
}
else{ // 이 안에 원래 프로그램의 내용을 넣습니다. else 구문은 삭제해도 무방합니다.
$no = $logged_info->member_srl;
$id = $logged_info->user_id;
$name = $logged_info->user_name;
$nick = $logged_info->nick_name;
$email = $logged_info->email_address;
$home = $logged_info->homepage;
$birth = $logged_info->birthday;
$is_admin = $logged_info->is_admin;
//로그인한 회원의 정보를 출력;;
echo $no; // 회원 번호
echo "\n<br />\n";
echo $id; // 아이디
echo "\n<br />\n";
echo $name; // 이름
echo "\n<br />\n";
echo $nick; // 닉네임
echo "\n<br />\n";
echo $email; // 이메일
echo "\n<br />\n";
echo $home; //홈페이지
echo "\n<br />\n";
echo $birth;//생일
echo "\n<br />\n";
if($is_admin == "Y") // 관리자 일 경우
echo "나는 관리자 입니다.";
else // 관리자가 아닐 경우
echo "나는 관리자가 아닙니다.";
}
주의해서 보실 부분은 1,2,11 라인입니다.
1번 라인에 zbxe가 설치된 절대경로를 입력합니다. 아래 그림에서처럼 관리자 페이지에 있는 것을 그대로 복사해 넣으세요.
맨끝의 / 까지 적어주셔야 합니다.
2번 라인은 zbxe를 불러올 수 있는 URL 입니다. zbxe란 폴더에 설치하셨으면 http://홈주소/zbxe/ 이렇게 되겠죠. 역시 / 까지 적어주세요.
11번 라인은 로그인이 안된 유저가 사용하려고 할때 로그인 화면으로 이동하는 겁니다.
이 로그인 화면을 zbxe 내의 외부페이지로 만듭니다. mid를 outlogin으로 한 것이 보이실 겁니다.
아래 그림처럼 layout도 미사용으로 세팅해주셔야 깔끔하게 로그인 화면만 뜹니다.
맨 아래 보시면 외부 프로그램이 있는 위치 /home/hosting_users/mytravian/www/mt/에서 outlogin.php 라는 파일을 불러왔습니다. 이 파일이 로그인 후에 외부 프로그램으로 다시 보내주는 역할을 합니다.
<?php
Header("Location:http://mytravian.net/mt/mt5test.php");
exit(1);
?>
아주 간단합니다. 돌아갈 외부 프로그램의 주소를 입력해주시면 됩니다. 주의하실점은 첫번째 소스의 $zbxe_url_path 와 outlogin.php 소스의 path가 동일해야 합니다. $zbxe_url_path 는 mytravian.net이라고 했는데, outlogin에서는 www.mytravian.net이라고 하시면 안됩니다.
zbxe의 외부 페이지 기능에선 referer 체크가 안되기 때문에, 외부프로그램마다 outlogin.php를 새로만들어서 외부페이지로 각각 등록해주셔야 합니다.
스샷 추가합니다. http://mytravian.net/mt/mt5test.php 에서 테스트해보실 수 있습니다.
로그인 ID와 비밀번호는 mttest 입니다.
처음 접속하면 로그인이 되어 있지 않으니 아래처럼 바로 outlogin 모듈을 불러옵니다.
여기서 mttest로 로그인을 하면 
아래와 같이 유저정보가 없다고 뜹니다. 추가정보의 타 사이트 서버 username와 password를 입력하지 않았기 때문이죠.
mttest가 아닌 제 ID로 로그인을 하면 아래처럼 나옵니다.
외부 프로그램에 zbxe 로그인 정보만 불러오는거기 때문에, Query도 아무 문제없이 사용가능합니다.
댓글 '33'
회원 가입시 추가정보를 말씀하시는 거라면, 변수로 '$login_info -> 추가정보이름' 을 쓰시면 됩니다. 추가정보 등록하실때 쓰신 영어로만 입력하라고 나오는 필드가 추가정보이름(column_name) 입니다.
추가정보에 서버 username 을 serverusername, 서버 패스워드를 serverpassword라고 등록했다면
$username = $login_info -> serverusername; // 외부 프로그램에서 필요한 타 사이트 로그인ID
$password = $login_info -> serverpassword; // 외부 프로그램에서 필요한 타 사이트 패스워드
이런식으로 쓰시면 됩니다. 제가 쓰고 있는 방법이구요.
저도 사실 다른 보드와 연계 로그인되는 것을 연구하고 있는데요.
제로보드에서 로그인후 다른 보드에서 로그인 정보를 사용하게는 되었어요.
반대로 다른보드에서 로그인후 제로보드에서 사용하려고 하니까 여러가지 난관에 부딛쳐서
주춤하고 있는데요.
도데군님은 제로보드 로그인창을 불러오는 방식을 선택하셨네요.
좋은 팁입니다.
혹시 여력이 되시면 세션이나 이런 것을 생성해서 공유하는 방법좀 연구해주시면 않될까요..?
^^
다른 보드것은 사용한지 2년 가까이라서 왠만한 방법과 구조는 아는데요.
제로보드에서 로그인시 세션을 생성하는 부분은 파악하기가 어려워서요.
그부분만 알면 연동하는 것은 일도 아닌데요.
저는 잘 모르겠네요.
^^
시간 나실때 도와 주세요.
^^
메리 크리스마스..에는 가족과 함께.
로그인 정보를 이용해서 다른보드에서 로그인한 것처럼 인식을 하게 해서 사용할 수 있게 되었어요
반대로 다른보드에서 로그인하고 제로보드로 이동할경우 로그인정보를 공유하려면
제로보드에서 로그인시 저장되는 세션 변수나 여기에 들어가는 것중 필수 입력사항들을 알면
공유할 수 있는데요.
아직 파악을 못해서요.
아래와 같이 하면 생성되는 세션 변수는 알겠는데요
어떤 내용이 들어가는지 몰라서요.
일단 여기서 중단했어요.
^^
foreach($_SESSION as $key=>$val){
echo "[$key] : $val<br>";
}
위 소스는 세션값을 불러와서 변수별로 표시만 해주는 거죠. 실제 생성되는 세션은 module/member/member.controller.php에 나와 있습니다. 로그인을 하면, procMemberLogin 함수를 불러오고 여기서 doLogin 함수를 다시 불러와서 이 안에서 setSessionInfo 함수를 불러옵니다. setSessionInfo 함수가 최종적으로 세션을 구워주는 함수네요.
// 로그인 처리를 위한 세션 설정
$_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;
// 관리자 그룹일 경우 관리자로 지정
$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;
}
// 세션에 로그인 사용자 정보 저장
$_SESSION['logged_info'] = $member_info;
코드를 보시면 is_logged 나 ip 등을 저장하고, 실제 로그인 사용자 정보는 doLogin에서 $member_info를 한꺼번에 다 불러와서 logged_info로 저장을 하는 것을 볼 수 있습니다. 결과적으로 member의 테이블은 다 저장하는 것으로 보시면 되겠네요.
다 필요없고 제로보드에서 print_r($logged_info) 해보시면 세션에 저장되는 모든 값들을 알 수 있겠군요.
stdClass Object
(
[member_srl] => 4
[user_id] => mttest
[email_address] => mttest@naver.com
[email_id] => mttest
[email_host] => naver.com
[user_name] => 루슬란
[nick_name] => 루슬란
[homepage] =>
[blog] =>
[birthday] =>
[allow_mailing] => N
[allow_message] => Y
[denied] => N
[limit_date] =>
[regdate] => 20071218222730
[last_login] => 20071224083901
[is_admin] => N
[description] =>
[profile_image] =>
[image_name] =>
[image_mark] =>
[body] =>
[page] =>
[signature] =>
[fiveserveruserid] =>
[fiveserverpassword] =>
[group_list] => Array
(
[1] => 관리그룹
)
[menu_list] => Array
(
[dispMemberInfo] => cmd_view_member_info
[dispMemberFriend] => cmd_view_friend
[dispMemberMessages] => cmd_view_message_box
[dispMemberScrappedDocument] => cmd_view_scrapped_document
[dispMemberSavedDocument] => cmd_view_saved_document
[dispMemberOwnDocument] => cmd_view_own_document
)
[is_openid] =>
)
여기서 필요한 거 골라 쓰세요. 추가 정보는 signature 다음에 계속 나오게 되겠구요.
간단하게 테스트 해보니 iframe 잘 작동하는데요? 로그인 정보 파일을 인클루드 하신다는게 어떤 의미인지 잘 모르겠으나 제가 한 것은 outlogin2.php 를 하나 생성하고 그것을 outlogin2 라는 외부페이지 모듈에 연결하였습니다.
<?php
echo("
<iframe src='http://mytravian.net/mt/mt5test.php' frameborder='no' width='565' height='800' align='left' scrolling='no'></iframe>
");
?>
http://mytravian.net/?mid=outlogin2 요거 클릭하시고 mttest 로 로그인해서 확인해보세요. 레이아웃 안에 iframe으로 프로그램이 뜨는 것을 보실 수 있을겁니다. 원래 있던 outlogin.php와 mt5test.php는 아무것도 손대지 않았습니다.
2.'zbxe의 외부 페이지 기능에선 referer 체크가 안되기 때문에, 외부프로그램마다 outlogin.php를 새로만들어서 외부페이지로 각각 등록해주셔야 합니다.'
윗 두줄 이 부분이 초보라 이해를 못해서 그런데요.
1부분에 외부프로그램 맨 윗줄이라 함은 다른 보드(예를들어 그누나 테크)라 한다면 그 프로그램을 띄우는 첫페이지? 에 넣는건가요??
2부분에 각각 등록이하 함은 그누, 테크 연동 프로그램이 두개일 경우 로그인 연결 페이지를 두개를 만들라는 말씀이신가요?
모르니까 거저 줘도 잘 못받아 먹네요 ㅡㅜ
- else{ // 이 안에 원래 프로그램의 내용을 넣습니다. else 구문은 삭제해도 무방합니다.
- $no = $logged_info->member_srl;
- $id = $logged_info->user_id;
- $name = $logged_info->user_name;
- $nick = $logged_info->nick_name;
- $email = $logged_info->email_address;
- $home = $logged_info->homepage;
- $birth = $logged_info->birthday;
- $is_admin = $logged_info->is_admin;
--------------------------------------------------------------------------------------------------------------------------
또 질문입니다. ㅜㅜ
위에서 수정할 부분을 정확히 몰라서 그런데요...
원래 프로그램의 내용이라 함은 그누나 테크연동일 경우 그 프로그램의 위 변수명에 해당하는 것으로 바꿔 주라는 건가요?
변경부분이 $no, $id 이런 부분을 바꿔 주라는 것이죠?
기초적인거 까지 질문드려 귀찮으시겠지만 알려주시면 정말 감사하겠습니다.
전 제로보드만으로 홈페이지를 만들었는데 외부로그인관련해서 도데님의 글이 무척 도움이 됐습니니다.
로그인을 했는데도 외부페이지에서 로그인으로 보여지지 않아서.. 도데님의 글을 참고하였습니다.
다만 모두 오픈페이지라.. 맨 윗 소스의 if(!$is_logged){부분이 있는 10~44줄을 뺐습니다.
그리고..outlogin.php 내용중.. Header("Location:http://***.com/"); 으로 바꾸어줬는데여..
로그인이나 로그아웃시 outlogin.php로 인해.. 메인으로 계속 가지는데여.. ㅡㅡ;;
로그인이나 로그아웃후 전페이지로 이동하게 보여주고 싶은데 제가 방법을 몰라서.. ㅡㅡ; 방법이 있을까요~~??
만일 is_logged 부분을 사용하시는 경우라면 페이지 별로 outlogin.php를 각각 만드셔서 보내는 수밖에 없습니다. A페이지에선 outlogin1.php B페이지에선 outlogin2.php 를 호출하고 outlogin1.php 에서 A페이지로 보내고, outlogin2.php에서 B 페이지로 보내는거죠. referer 체크가 안되니 현재로선 방법이 없을 것 같네요.
이 팁이 한참되었는데...이제 보고 적용하려니 잘안돼서 올립니다.
위 그대로 했는데 이런 메세지가 나옵니다.
Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /web/home/test100/html/test/test100.php:1) in /web/home/test100/html/test/test100.php on line 9
즉 세션을 시작하지 못한다는 것 같습니다.
line 9에는 session_start() 가 있습니다.
혹시 도와주실분 없나요.?
초보자는 너무 어려운 말이 너무 많아서 이해를 하기 어려워요 xe 1.1.1에서 사용할수있는 소스좀 없을가요?
<iframe src='http://crm.blueweb.co.kr/bluecgi/member/member.php?
dbname=game0310&actions=login' frameborder=0 marginheight=0 marginwidth=0 scrolling=no
width=150 height=100></iframe>
이런 식으로 해서 어떻게 만들수 없을까요 완전 초보라 다른 사이트의 소스를 가지고 말씀 드립니다 사실 이소스도 이해를 하지 못하지만 아시는 분은 만들수 있을거 같아서요 너무 어이없는 애기라면 미안 합니다
제로보드에서만 연결하고 외부에서 로그인 하지않은 사람은 보여주지 않는 그런 방법이요...







조금더 구체적으로 부연설명이 있었으면 고맙겠습니다.
예를 들어 실제 적용된 페이지라도 링크해 주신다면 어떨까 싶은데요.
제가 너무 욕심을 부린것은 아닌지 싶군요.