그누보드 세션질문좀 드립니다...
본문
그누보드 세션질문좀 드립니다...
우선 /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;
});
});
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 테스트 툴에서 성공적으로 테스트하려면
먼저 로그인하고, 쿠키를 계속 유지해주면서
글 작성전에 계속 토큰을 구하여 지속적으로 쿠키를 유지해주는 수밖에 없습니다.
본인 사이트라면 해당 체크 부분을 뺀 코드를 따로 짜세요...