그누보드 세션질문좀 드립니다...

그누보드 세션질문좀 드립니다...

QA

그누보드 세션질문좀 드립니다...

본문

그누보드 세션질문좀 드립니다...

 

우선 /bbs/login_check.php에서 로그인할떄 세션추가

set_session('ss_mb_key', md5($mb['mb_datetime'] . $_SERVER['REMOTE_ADDR'] . $_SERVER['HTTP_USER_AGENT']));

 

이부분이랑

게시글작성할때

/bbs/write_update.php에서 글등록할때 insert

check_write_token($bo_table);

 

function check_write_token($bo_table)
{
 echo $bo_table;
    if(!$bo_table)
        alert(aslang('alert', 'is_wrong'), G5_URL);

    $token = get_session('ss_write_'.$bo_table.'_token');


    set_session('ss_write_'.$bo_table.'_token', '');

    if(!$token || !$_REQUEST['token'] || $token != $_REQUEST['token'])
        alert(aslang('alert', 'is_wrong'), G5_URL);

    return true;
}

 

요 2개 부분이 궁금합니다.

처음에 login_check에서의 세션키를 생성하는것과

게시글등록할떄 login_check에서 세션키를 가지고 하는게 아닌가요?

좀 틀린것같더라고요 postman으로 test해보는데 글 등록이 안되더라구요

그래서 로그인할때 세션생성하는 부분 키는 아닌것같고..

게시글등록할떄의 세션은 어디서 가져오는건가요?

/dada/session/ 이부분에도 파일명세션이 아닌것같고.. 

게시글등록할떄 wrte_update.php 에서 어떤  토큰키를 넘겨야 글등록이 되는지 궁금합니다..

 

ps. 게시글등록할떄 토큰값이 로그인체크페이지에서 세션생성되는부분(키)로하는게 아닌지..

이 질문에 댓글 쓰기 :

답변 2

글쓰기할 때 생성되는 토큰은 js/common.js 파일에 관련 내용이 있습니다.

해당 파일 내용 마지막 부분..

 

$(function() {
    $(document).on("click", "form[name=fwrite] input:submit, form[name=fwrite] button:submit, form[name=fwrite] input:image", function() {
        var f = this.form;

        if (typeof(f.bo_table) == "undefined") {
            return;
        }

        var bo_table = f.bo_table.value;
        var token = get_write_token(bo_table);

        if(!token) {
            alert("토큰 정보가 올바르지 않습니다.");
            return false;
        }

        var $f = $(f);

        if(typeof f.token === "undefined")
            $f.prepend('<input type="hidden" name="token" value="">');

        $f.find("input[name=token]").val(token);

        return true;
    });
});

저장되는 위치와 파일은 로그인할 때 생성되는 세션 파일과 똑같습니다.
단계별로 체크해보면 파일 용량이 계속 늘어날 겁니다. 파일을 받아보면 내용이 계속 추가됩니다.
get_write_token, check_write_token 함수는 common.lib.php 파일에 있고요.

하나만 더물어볼게영,,
get_write_token 이부분에서 해당 bo_table 이름을 넘겨주면
그 토큰을리턴된거로 글등록이된다는 말씀이신가요?
그런데 제가 방금 테스트해봤는데 get_write_token 이부분이 글등록할떄마다 토큰값이 달라지더라구요 postman으로 token / 값 보내서 테스트확인할방법이 있을까요?
아참 그리구 data/session은 변하는게 없네요. 세션파일추가되는게 없네요

세세하게 설명해드릴 실력은 못 되고요. 세션 파일이 새로 생성되는 게 아니라 같은 파일에 내용이 업데이트돼서 추가된다고 말씀드렸습니다.
새로운 세션 파일은 웹브라우저를 완전히 닫고 재 실행해서 접속했을 때 새로운 파일로 다시 생성됩니다.
그럼 여기까지만..

function get_write_token($bo_table)
{
    $token = md5(uniqid(rand(), true));
    set_session('ss_write_'.$bo_table.'_token', $token);

    return $token;
}

 

// 세션변수 생성
function set_session($session_name, $value)
{
    if (PHP_VERSION < '5.3.0')
        session_register($session_name);
    // PHP 버전별 차이를 없애기 위한 방법
    $$session_name = $_SESSION[$session_name] = $value;
}

 

두 함수를 보시면 아시겠지만 

랜덤 값을 만들어 $_SESSION 세션 변수에 저장하는 일만 합니다.

 

data/session 폴더 내의 세션 파일에는 기록하지 않습니다.

이런 코드를 넣은 이유가 스팸 프로그램을 방지하기 위해서 넣은것으로 사료됩니다.

 

Postman 같은 api 테스트 툴에서 성공적으로 테스트하려면

먼저 로그인하고, 쿠키를 계속 유지해주면서

글 작성전에 계속 토큰을 구하여 지속적으로 쿠키를 유지해주는 수밖에 없습니다.

 

본인 사이트라면 해당 체크 부분을 뺀 코드를 따로 짜세요...

답변을 작성하시기 전에 로그인 해주세요.
전체 8
QA 내용 검색

회원로그인

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