Q&A

네이버 모바일 로그인 페이지처럼  따로 로그인을

로그인 전용 레이아웃을 사용해서 위젯 페이지로 만들어서 사용할 경우에

로그인 페이지로 접속해서 로그인한 이후에..

보통 관리자 회원 로그인 설정에서 설정해둔 메인 페이지로 이동이 아닌...

로그인하기 전에 보고 있던 페이지로 다시 이동하기를 하려고 하면 어떻게 해야하나요?;;;

이온디 Lv. 13
# 라이믹스 스킨 제작은 어디? >>>> XE 레이아웃, 라이믹스 스킨제작은 이온디에서 커스터마이징해드립니다.
# 빠른 라이믹스 커뮤니티용 호스팅을 찾고 계신가요? >>>> 이온디호스팅 서비스는 PHP8 & Redis 서버 캐시를 활용하여 라이믹스에 최적화된 호스팅 서비스를 제공해드립니다. (서버세팅시 웹패널, 내도메인메일서비스도 함께 구축해드립니다.)
https://eond.com

댓글 17

  • modules/member/skins/default/login_form.html 템플릿을 보세요.
    success_return_url이라는 항목에 {$referer_url}이 들어 있습니다.
    로그인 후에는 바로 전 페이지로 돌려보내 달라는 뜻이죠.

    만약 다른 곳에서 $referer_url 변수가 필요하다면
    modules/member/member.view.php 420~430줄 전후를 참고하여 만들어 쓰시면 됩니다.
  • @기진곰
    산너머 산이군요. 감사합니다. ㅎㅎ;
  • @기진곰
    <input type="hidden" name="success_return_url" value="{htmlspecialchars(getRequestUriByServerEnviroment(), ENT_COMPAT | ENT_HTML401, 'UTF-8', FALSE)}" />
    <input type="hidden" name="success_return_url" value="{$referer_url}" />

    어떤 스킨에서는 이렇게도 있던데 차이는 뭔지 혹시 알수 있을까요^^;
  • @이온디
    위의 것은 로그인 창이 위치한 현재 페이지로 도로 돌아옵니다.
    아래의 것은 리퍼러(이전 페이지)로 돌아갑니다.
    로그인 위젯에서는 위의 것을 쓰는 게 옳고, 별도의 로그인 페이지라면 아래의 것을 써야죠.
  • 로그인 페이지로 넘어 올 때 리퍼러를 저장하면 되지요
  • @하늘희
    네 그 방법을 몰라서 ㅋ 안되는 줄 알았는데 되는 방법이 있는거 같긴 하네요. ㅎ
    감사합니다. ㅎ;; 찾아볼게요 ㅠㅠ
  • @하늘희
    리퍼러를 저장한다는 말씀을 어떻게 하면 되는지 잘 몰라서 그러는데
    기존에는

    <input type="hidden" name="success_return_url" value="{htmlspecialchars(getRequestUriByServerEnviroment(), ENT_COMPAT | ENT_HTML401, 'UTF-8', FALSE)}" />

    이렇게 사용해서 로그인 버튼을 처리했습니다.

    그런 식을.. 위에 기진곰님께서..

    <input type="hidden" name="success_return_url" value="{$referer_url}" />

    이렇게도 가능하다고 하셔서요.. 저게 로그인 후에 바로 전 페이지로 돌려보내라는 말이라고 하셨는데
    원래는 코드 자체에는 저렇게만 하면 리퍼러를 저장해서 넘기는 게 되는 것이고...

    저 {$referer_url} 이 코드를 레이아웃에서 사용하려면..
    ....
    뭐 잘 몰라서 php로 그냥 날코딩하면..

    <input type="hidden" name="success_return_url" value="<? echo($_SERVER['HTTP_REFERER']); ?>" />

    이렇게 하니깐 되네요.. 혹시 더 좋은 방법 있나요?;
  • @이온디

    value="{htmlspecialchars($_SERVER['HTTP_REFERER'], ENT_COMPAT, 'UTF-8')}"

  • @기진곰

    감사합니다;;;
    한가지 더 여쭤봐도 될까요^^;


    php 에서 보면 encode/decode를 해줘라고 되어있던데요..

    <? echo( urlencode( $_SERVER['HTTP_REFERER'] ) ); ?>

    이런 식으로 하면... 서브밋되면 자동 decode가 되서.. 다시 끝에서 urldecode 해서..

    location.href = '<?php echo urldecode($_POST['success_return_url']);?>';

    이렇게 사용하라고 되어있던데요..

    제가 이해를 잘 못해서 그런데.. XE에서는 그냥 <? echo($_SERVER['HTTP_REFERER']); ?>
    이렇게만 적어도 잘 동작하던데.. 위의 말은 무슨 이야기인지 설명 부탁드려도 될까요?;;

  • @이온디
    urlencode는 하지 마세요. 이미 제대로 되어있는 인터넷 주소에 urlencode하면 깨집니다.
    XSS 공격을 막기 위해 htmlspecialchars만 해주면 됩니다.
  • @기진곰
    지금 htmlspecialcharts 안에 $_SERVER['HTTP_REFERER'] 를 써준 부분을 인지를 못하고 있어서요;;
    그냥 이렇게 쓰는 거랑 다른가요?;
    <input type="hidden" name="success_return_url" value="<? echo($_SERVER['HTTP_REFERER']); ?>" />
  • @이온디
    함수 이름은 제대로 쓰셨나요? htmlspecialcharts가 아니라 htmlspecialchars인데...

    XE 문법 { } 으로 안되면 그냥 <?php echo htmlspecialchars($_SERVER['HTTP_REFERER']); ?> 도 해보세요.
  • @기진곰
    {htmlspecialchars( $_SERVER['HTTP_REFERER'] );}
    위에껀 안되구요.
    <? echo htmlspecialchars( $_SERVER['HTTP_REFERER'] ); ?>
    이건 되네요 ㅎ;;
  • @기진곰
    바로 위젯 페이지에서.. 로그인 레이아웃에서는 알려주신 코드는 인지를 못하는 거 같네요.. 아숩;;
  • @이온디
    getRequestUriByServerEnviroment()은 현재 페이지의 URL이고, 리퍼러는 바로 전 페이지의 URL이므로
    로그인 후 현재 페이지로 돌아와야 하는지, 이전 페이지로 돌아가야 하는지에 따라 용도가 다릅니다.
  • @기진곰
    커피라도 한잔 대접해야겠네요 ㅠㅠ 감사합니다.
  • @이온디
    커피 얻어먹으러 경산 가야겠네요! ㅋㅋ