웹호스팅 서버이전 하는데 로그인이 안됩니다.. > 그누4 질문답변

그누4 질문답변

그누보드4 관련 질문은 QA 로 이전됩니다. QA 그누보드4 바로가기
기존 게시물은 열람만 가능합니다.

웹호스팅 서버이전 하는데 로그인이 안됩니다.. 정보

웹호스팅 서버이전 하는데 로그인이 안됩니다..

본문

그누보드 버전: 4.34.03 (11.05.17)

http://flutekorea.com/gnuboard/
MySQL - 4.0.16(euc-kr)

에서
http://gilson.hostple.net/gnuboard/
Server version: 5.1.53 (utf8) 로

계정을 통째로 옮기고 디비도 옮기고 했는데

그누보드 관리자 로그인이 되지않습니다.

그리고 이미지도 이상하게 보여지네요.. ㅡ.ㅡ;;

방법이없을까요?
  • 복사

댓글 전체

DB 서버 버전이 바뀌면서 비밀번호가 길이가 바뀐 것이 원인이 아닐까 합니다.
http://sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=238762&sca=&sfl=wr_subject||wr_content&stx=password&page=2 참고해 보시기 바랍니다.

이미지는 제대로 업로드가 되지 않은 것 같습니다. FTP 프로그램을 이용해 업로드 하셨다면
전송모드를 바이너리로 변경하셔서 이미지만 업로드 해보시기 바랍니다.
아~ 찾았네요...
http://sir.co.kr/bbs/board.php?bo_table=g4_qa&wr_id=214028&sca=&sfl=wr_subject%7C%7Cwr_content&stx=old_password

아래 해피정님의 팁대로 해보니까 됩니다.. 질문자님의 내용과 저의 내용이 일치하더군요..
회원 로그인도 안돼고 회원가입시 아래 보안코드숫자도 안보이는 증상...
아래는 해피정님의 답변내용입니다..
--------------------------------------------------------------------------



원본: http://happyjung.com/gnuboard/bbs/board.php?bo_table=lecture&wr_id=320
아래 내용을 참고하세요

제로보드와 GNU보드 둘다 회원들의 password를 관리할때 MySQL의 password()를 사용하는데 이 함수가 4.0이하와 4.1이상에서 다른 hashing value를 가집니다. 다 아시겠지만 4.0이하는 16바이트,
 4.1이상은 40바이트의 hashed value를 가집니다.

패스워드가 모두 옛날 password()함수로 되어있습니다.
최근에 호스트쪽에서 MySQL 4.1.X로 업그레이드를 해서 지금 설치된 그누보드는 password()를 쓸때에 모두 16바이트 대신 40바이트의 hashed value를 돌려주게 됩니다.
 
즉, 회원정보를 옮겨오면 로그인이 안되는것이죠.
다음과 같이하면 됩니다.


1. 그누보드 / lib / common.lib.php 의 1111번째 줄에
function sql_password($value) 를 검색해서 아래와 같이 함수를 추가합니다.

function sql_old_password($value)
{
    $row = sql_fetch(" select old_password('$value') as pass ");
    return $row[pass];
}

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];
}


2. 그누보드 / bbs / login_check.php 의 25번째줄의
// 수정전
if (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password])) {
    alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");
}

// 수정후
if (sql_old_password($mb_password) == $mb[mb_password]) { // 옛날 패스워드를 새로운 패스워드로 바꿉니다.
    $sql = " update $g4[member_table] set mb_password='" . sql_password($mb_password) . "' where mb_id='$mb_id' ";
    sql_query($sql);
} elseif (!$mb[mb_id] || (sql_password($mb_password) != $mb[mb_password])) {
    alert("가입된 회원이 아니거나 패스워드가 틀립니다.\\n\\n패스워드는 대소문자를 구분합니다.");
}


3. 그누보드 / bbs / register_form.php 의 73번째 줄을

// 원본
    if (!($member[mb_password] == sql_password($_POST[mb_password]) && $_POST[mb_password]))
        alert("패스워드가 틀립니다.");
// 수정
if (!($member[mb_password] == sql_password($_POST[mb_password]) && $_POST[mb_password]) && !($member[mb_password] == sql_old_password($_POST[mb_password]) && $_POST[mb_password]))
        alert("패스워드가 틀립니다.");


옛날 사용자가 mysql 4.0.x 패스워드방식(16 bytes)을 사용하여 로그인하면 mysql 4.1.x 버젼의 패스워드(41 bytes)를 멤버테이블의 mb_password 에 저장하게 됩니다.
 
로그인할때에만 현재의 패스워드 방식을 확인하고 새로운 패스워드 포맷으로 DB 에 업데이트 하므로 /bbs/register_form.php, /bbs/member_leave.php 를 수정할 필요가 없습니다.
 모든 회원이 한번이라도 로그인하게 되면 패스워드가 모두 새로운 패스워드 포맷으로 저장되게 되므로 그누보드가 버젼업될때마다 해당코드를 수정하지 않아도 됩니다.
© SIRSOFT
현재 페이지 제일 처음으로