타사이트의 회원 정보 공유하기 > 그누4 팁자료실

그누4 팁자료실

그누보드4와 관련된 팁을 여러분들과 함께 공유하세요.
나누면 즐거움이 커집니다.

타사이트의 회원 정보 공유하기 정보

타사이트의 회원 정보 공유하기

첨부파일

login_check_another.php (3.6K) 335회 다운로드 2006-06-16 15:38:24
login_check_share.php (2.2K) 92회 다운로드 2006-06-16 15:38:24
Snoopy.class.php (37.1K) 368회 다운로드 2006-06-16 15:38:24

본문

다른 사이트에 있는 회원이 그누보드에 따로 회원가입하지 않고 그누보드의 게시판을 사용할 필요가 있어서 2개의 그누보드를 설치하여 테스트해보았습니다.

###설치###
다른 사이트(G4_A)의 회원정보를 G4_B에서 사용한다고 가정하면
G4_A에 login_check_share.php를 bbs폴더에 복사하고 G4_B에는 login_check_another.php를 복사합니다. Snoopy.class.php는 php.ini에 정의되어 있는 include_path 안에 복사합니다.

*G4_B의 login_check_another.php는 G4_A에 회원인증을 요청하고 결과를 받아 회원세션처리를 합니다.
*G4_A의 login_check_share.php는 G4_B에서 요청한 회원에 대한 인증후 회원정보를 리턴합니다.

테스트를 하긴 했는데 테스트버전이어서 추가해야 부분이 많이 있을겁니다.
유창화님의 글(http://www.sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=25193#c_25270)를 참고했습니다.
추천
4

댓글 34개

제가 몇마디 로직만 설명했는데
금방 뚝딱 만들어 보셨군요

조금만 더 손을 보면 아주 훌륭한 것이 나올것 같습니다.
고생하셨습니다,

Snoopy 클래스 제가 오래전 부터 사용해오던 것인데
아주 좋은 클래스 입니다.
답변이 무척 빠르시군요.
고맙습니다.
전 php코딩을 자주하는 편이 아니고 처음으로 그누보드를 이번에 프로젝트하나에 적용해보고 있습니다. Snoopy도 phpschool에서 알게 되어 썼는데 처음에는 fsockopen를 사용했는데 Snoopy로 코드를 간단하게 만들수 있었습니다.
앞으로 많은 조언 부탁합니다.
이제 그누보드에 입문해서 그동안 많은 팁과 스킨을 사용했는데 그 때마다 많은 도움을 받았지요.
시스너스님의 자료도 많이 이용했습니다. 고맙습니다.
제가 간단한 샘플을 하나 만들었습니다.

다른 서버와 다른 도메인 다른 데이타베이스를 사용하는 두개의 그누보드 4로 된 사이트에서
A사이트는 회원정보가 있고, B사이트에는 회원 정보가 없고, B사이트는 A사이트의 회원을 사용한다.
라고 할때.......

B사이트에서 A사이트의 회원 정보를 가져오는 연동 예제입니다.
여기서는 소켓을 사용하지 않고 file()함수를 사용했습니다.

편이상 A사이트를 서버라고 칭하고, B사이트를 클라이언트라고 칭했습니다.



클라이언트 측의 lib/common.lib.php내의 get_member 함수 수정

function get_member($mb_id, $fields='*')
{
    global $g4;

    //$g4 환경변수에 $g4['member_server_password'], $g4['member_server_domain'] 설정한 상태에서만 사용가능

    $return = Array();
    $getline = @file('http://' . $g4['member_server_domain'] . '/?member_server_password=' . $g4['member_server_password'] . '&mb_id=' . $mb_id . '&fields=' . $fields);

    $getline[0] = trim($getline[0]);
    if (!empty($getline[0])){

      $cutstring = explode('&', $getline[0]);
      foreach($cutstring as $temp){

        list($key, $value) = explode('=', $temp);
        $key = trim($key);
        if (empty($key)) continue;

        $return[$key] = $value;
      }
    }

    return $return;
}



서버측의 member_server/Yget_member.php 생성
<?php

header('P3P: CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"');

$g4 = array();

$g4['path'] = "..";
include_once($g4['path'] . "/config.php");  // 설정 파일, $g4['member_server_password'] 이 설정되어있어야 함

//인증 패스워드 비교
if ($g4['member_server_password'] != $_GET['member_server_password']) exit;

//넘어온 값체크
$_GET['mb_id'] = trim($_GET['mb_id']);
$_GET['fields'] = trim($_GET['fields']);
if (empty($_GET['mb_id']) || empty($_GET['fields']) exit;

include_once("$g4[path]/dbconfig.php");
$connect_db = @mysql_connect($mysql_host, $mysql_user, $mysql_password) or exit;
$select_db = @mysql_select_db($mysql_db, $connect_db) or exit;

$sql = "select " . $_GET[fields] . " from " . $g4['member_table'] . " where mb_id = '" . $_GET['mb_id'] . "'";
$result = @mysql_query($sql) or exit;
$array = @mysql_fetch_assoc($result) or exit;

if (is_array($array)){

  $text = '';
  foreach($array as $key => $val){

    $text .= $key . '=' . $val . '&';
  }

  $text = preg_replace("`&$`", "", $text);
  echo $text;
}

exit;

?>
이것은 연동에 대한 한부분이지 전체 부분은 아닙니다.
위의 부분들을 보시면 충분히 구현해 내실수 있으시리라 봅니다
빠르시군요. 이렇게 하는 방법도 있군요. 소스는 제대로 이해를 못했지만요.
제가 회원정보를 공유하려는 서버는 ASP로 운영되고 있는데요. Yget_member.php 를 다른 언어(ASP등)로 가능할까요.
그리고 기존의 get_member()를 수정해도 기존 클라이언트에서 회원로그인에는 문제가 없는건가요
네에 제가 asp랑 php로 연동해본 경험도 여러번 있습니다만......

네 물론 가능하지요.
그러나 서로 다른 환경이라면 고려할것이 많습니다.

네에 위의 예제는 B사이트의 회원은 아예고려 하지 않은 부분입니다.
저런식으로 get_member를 수정하게 되면
B사이트 자체의 회원 로그인은 불가능하게 됩니다.
Yget_member.php 가 하는 일은
먼저 인증 패스워드 값을 비교하여 일치 하지 않으면
Response.End

Request.QuerySting("mb_id")  와 Request.QuerySting("fields")  가 둘중에 하나라도 없으면
Response.End

ASP사이트에서 정해진 방식데로 데이타베이스에 연결하여
넘어온 회원아이디와 필드값을 가지고 회원테이블에서 셀렉트 하여
그것을 그냥 쿼리스트링 스타일로 키값=밸루값&키값=밸루값 형태로 출력만 시켜주면 됩니다.

물론 ASP사이트의 멤버 테이블의 구조와 PHP사이트의 회원정보 구성이 다르다면
키값을 매치시키는 작업을 선행해야 합니다.
먼저 감사합니다.
말씀하신데로 공유하려는 사이트의 회원아이디(키값)과 그누보드의 회원아이디의 중복 처리가 필요하지요.
그래서 저는 ASP사이트 회원아이디에 특정문자를 붙여 그누보드의 회원아이디로 사용하려고 합니다. ASP사이트의 회원아이디는 사번으로 숫자로 되어 있거든요.
글의 취지와 맞진 않지만... ^^;
몇가지 문의좀 드리겠습니다.
같은 php를 사용하는 쇼핑몰에 그누보드로 제작한 게시판을 서로 연동하고 싶은데요
회원정보를 공유하는게 가능할까요?? ^^;
쇼핑몰에서의 회원가입정보와 그누보드게시판에서의 회원가입정보중에 둘중에 하나를 선택해서 연동해야하는 건가요???
만약 의뢰를 드리면 견적은 어느정도 나올까요??
제가 지식이 없어서요... 답변 부탁 드립니다~
상황에 따라 여러가지 해결책이 있겠지만
선생님의 경우라면
영카트를 구매해서 php쇼핑몰을 영카트로 이전하는 것이 좋아보입니다.
그러면 그누보드와 회원연동에 대해서 고민하지 않아도 해결될것입니다.

불가능할것은 없겟지만 작업기간이 두배 이상 소요될 것입니다.
견적에 대한 부분은 여러 다른 전문가들 분에게 의뢰해 보시는것이 좋겠습니다
친절한 답변 감사드립니다. ^^
현재 php쇼핑몰을 영카트로 이전하지않고 작업을 했으면 바라고 있습니다.
몇개월을 쏟아부은 쇼핑몰이라서요 ^^;
유창화님의 말씀을 들으니... 쉽지 않은 작업이라는것이 느껴지네요...
내심 어렵지 않은 작업이길 바랬는데...^^;

혹시 가능하시다면.. 유창화님께서 의뢰를 받아주실 생각은 없으신지요 ^^


편안한밤 되세요~
유창화님 소스예제를 통해 해결 할 수 있었습니다. 감사합니다.

그런데 비밀번호 비교가 잘 안될때가 있습니다. 여러가지 문제가 있을 수 있지만,
mysql 4.0 과 4.1 은 비밀번호 암호화 방식이 다른점을 염두에 두어야 합니다.

// lib/common.lib.php 참고.
function sql_password($value)
{
    // mysql 4.0x 이하 버전에서는 password() 함수의 결과가 16bytes
    // mysql 4.1x 이상 버전에서는 password() 함수의 결과가 41bytes
    $row = sql_fetch(" select password('$value') as pass ");
    return $row[pass];
}

그래서 bbs/login_check.php 에서 에러가 날 수 있습니다.
sql_password() 함수는 클라이언트의 암호화방식을 택할 테니까요.
이를 회원정보 받아오는 서버에 pass.php 라는 파일 만든후 그 서버의 비밀번호 암호화 방식대로 암호화한뒤 다시 받아오는 방법을 통해 해결했습니다. 유창화님 소스와 거의 동일 합니다.

<?php

//회원서버의 pass.php 를 생성합니다.

header('P3P: CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"');

$g4 = array();
$g4['path'] = "..";
include_once($g4['path'] . "/config.php");

$pass = trim($_GET['pass']);
include_once("$g4[path]/dbconfig.php");
$connect_db = @mysql_connect($mysql_host, $mysql_user, $mysql_password) or exit;
$select_db = @mysql_select_db($mysql_db, $connect_db) or exit;

$result = mysql_query("select password('$pass') as pass");
$row = mysql_fetch_array($result);
echo $row[0];
exit;
?>

<?
// 클라이언트의 bbs/login_check.php 를 수정합니다.

$getline= @file('[서버의 pass.php URL]/?pass='.$mb_password);
$getline[0] = trim($getline[0]);

if (!$mb[mb_id] || ($getline[0] != $mb[mb_password]))
    alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.";

?>



그리고 인코딩 문제가 발생할 시에 유창화님의 소스중  get_memeber() 에..

$getline[0] = iconv('euc-kr', 'utf-8', $getline[0]);

이 구문을 추가함으로 해결 할 수 있습니다.
좋게 잘 해결하셨네요.
한가지 염두에 두셔야 할것은
연동방법이 웹페이지를 이용한 방법이므로
웹서버의 자원을 더 사용하는 단점이 있습니다.
동접수가 아주 많은 사이트는 이런 방법이 한계가 있습니다.

그런 문제가 발생하면
웹페이지 방식이 아니 다른 포트를 사용하는 서버와 클라이언트를 만드는 것이 좋습니다.
같은 홈페이지에 같은 DB를 쓰고 두개의 보드를 설치하였습니다.
서버 bbs, 클라이언트 bb2 이렇게 두개의 보드가 나란히 설치되어 있습니다.

클라이언트측 config.php 에
 $g4['member_server_password']  = "123456778899";
 $g4['member_server_domain']    = "도메인주소/bbs";
같이 설정하고
서버 config.php 에
 $g4['member_server_password']  = "123456778899";
 $g4['member_server_domain']    = "도메인주소/bbs";

이와 같이 설정하고 서버에 pass.php 생성하고
클라이언트 login_check.php 에서
$getline= @file('도메인주소/bbs/pass.php?pass='.$mb_password

이렇게 하고 나서 클라이언트에서 접속하면
가입된 회원이 아니거나 패스워드가 틀립니다 이렇게 에러가 뜹니다.
뭐가 잘 못된것인지 php를 잘 몰라서 모르겠습니다.

차근차근 예를 들어서 설명 좀 부탁 드립니다.
감사합니다.
흐흠;; 클라이언트측에서 로그인한후에 하얀 화면만 나오는 이유는 무엇인지 모르겠네요^^;
다시 돌아가도 로그인은 안되어있고^^; 아이고;
Snoopy.class.php 요걸 정확히 어디다가 넣어야하는지..;;
사이트 운영중입니다
사이트간 공유를 원하는데 자동로그인을 좀 도와주실분 연락주세요
*** 개인정보보호를 위한 휴대폰번호 노출방지 ***
전체 3,313 |RSS
그누4 팁자료실 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT