로그인 후 페이지 이동 질문드립니다.
본문
로그인 페이지(/bbs/login.php)에서 로그인을 하면 인덱스 화면으로 넘어가는데
이걸 로그인을 시도했던 페이지로 가게 하고 싶은데 어디서 수정을 해야 하나요?
답변 2
일반적으로 로그인이 안된 상태에서 로그인이 필요한 페이지에 접근할때 로그인 페이지로 이동하게 됩니다.
이때 이전 페이지 주소가 url 이란 변수로 쿼리스트링에 담기게 됩니다.
예를들면 http://demo.sir.co.kr/gnuboard5/bbs/login.php?url=http%3A%2F%2Fdemo.sir.co.kr%2Fgnuboard5%2Fbbs%2Fqalist.php
붉은색 글씨가 바로 이전페이지 주소에 해당하는 부분이고 로그인하게 되면 해당 페이지로 다시 이동됩니다
특별히 소스를 고치지 않으셨다면 바로 이동하게 될텐데 제대로 안되고 있다고 하면
로그인 페이지에서 $_SERVER["HTTP_REFERER"] 를 이용하여 이전페이지 주소로 다시 이동할 수 있습니다.
그누보드 5 기준 login_check.php 67번째 라인부터 보시면 아래와 같은 소스가 있습니다.
if ($url) {
// 2003-06-14 추가 (다른 변수들을 넘겨주기 위함)
if (preg_match("/\?/", $link))
$split= "&";
else
$split= "?";
// $_POST 배열변수에서 아래의 이름을 가지지 않은 것만 넘김
foreach($_POST as $key=>$value) {
if ($key != 'mb_id' && $key != 'mb_password' && $key != 'x' && $key != 'y' && $key != 'url') {
$link .= "$split$key=$value";
$split = "&";
}
}
} else {
$link = G5_URL;
}
위와 같이 소스가 되어 있다면 로그인 후 이전 주소로 잘 이동될껍니다.
단 로그인이 필요하지 않은 페이지를 돌아다니다가 외부로그인 창으로 로그인하면 인덱스로 가게 됩니다.
소스가 변형된 경우라면 거나 무조건 이동시키고 싶다면
if ($url) { .... 바로 윗줄에
$url = $_SERVER["HTTP_REFERER"];
위 구문을 추가해주시면 잘 될것으로 예상됩니다. 실제 테스트는 직접 해보시길.,
한가지 더 참고하실 내용입니다.
이전 페이지에 파라메터를 달고 다니는 경우가 있을수 있습니다.
예를들면 a.php?id=xxx&name=yyyu 와 같이 파라메터까지 같이 가지고 가야 하는 경우는
$_SERVER['QUERY_STRING'] 변수를 이용해 보세요.