메뉴 건너뛰기

프로그램언어

조회 수 11363 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄

브로우저의 Back, Forward 버튼을 누를 때
로그인, 글 작성등을 처리하는 중간 페이지에 걸려서
1. 만료된 페이지라는 메시지가 출력되거나
2. 처리 결과에 따라 오류 페이지로 계속 되돌아 오는 경우를
만들어 보셨을거라 생각됩니다.

예를들어
A(로그인 입력 페이지) -> B(로그인 처리 페이지)
-> C(정상처리 후 이동 URL), D(오류 처리후 이동 URL)
방식으로 처리한다면
B는
1. 정상이면 (메시지 출력 후) C로 이동 오류이면 (오류메시지 출력 후)  D로 이동
방식이거나
2. 정상이면 C로 이동 오류이면 D로 이동 (D = 오류메시지를 포함한 A와 동일/유사 페이지)
방식일겁니다.

메시지를 출력하기 위해 JavaScript의 alert를 사용했다면
C나 D 페이지에서는 브로우저의 Back버튼을 누르면
B로 이동했다가 C나 D로 되돌아가는 문제가 반복됩니다.

혹은 Location header로 C나 D로 보낸다면
alert('로그인 실패'); 등의 메시지를 출력할 수 없게 됩니다.

이런 문제를 해결하기 위한 방법을 제시합니다.

먼저 페이지 이동 시키는 방법은
1. HTTP Header > header("Location: url"); < PHP Function
2. HTTP Header > header("Refresh: 0; URL=url"); < PHP Function
3. JavaScript > window.location.href = url;
4. JavaScript > window.location.replace(url);
5. Meta Tag > <meta http-equiv="Refresh" content="0; URL=url">
등입니다.

위에서 말씀 드렸듯이
1번 방법은 처리 결과 메시지를 출력하지 못합니다. (Back 버튼 문제는 없음)
3,4,5번 방법은 Back 버튼을 누르면 다시 C나 D로 되돌아 오는 문제가 반복됩니다.

2번 방법으로 처리하면
Location Header와
메시지 출력을 동시에 할 수 있습니다.
(먼저 메시지가 출력되고 확인을 누르면 페이지로 이동)

아래 함수는 제가 사용하고 있는 것에
이런 이슈를 반영하여 수정한 것 입니다.

사용방법
Error(Message, Url, Url2);
Message : Alert할 문자열 (줄 구분은 <br>)
Url : 현재 페이지의 이동 주소 혹은 팝업창일 경우 'self.close':닫기, 'history.back':이전페이지
Url2 : 부모창의 이동 주소

-------------------------------------------------------------------------------------------
    function error($message="", $url="", $url2="")
    {
        if(!$message && !$url)
            return;

        $message=eregi_replace("<br>|<br/>|<br />","\n",$message);
        $message=str_replace(""","\"",$message);
        if($url=="self.close")
        {
            echo "<script language="JavaScript">n";
            if($message)
            {
                echo "alert('{$message}');n";
            }
            echo "self.close();n";
            if($url2)
            {
                echo "opener.location.href = "{$url2}";n";
            }
            echo "</script>n";
        }
        else if($url=="history.back")
        {
            echo "<script language="JavaScript">n";
            if($message)
            {
                echo "alert('{$message}');n";
            }
            echo "history.back();n";
            if($url2)
            {
                echo "opener.location.href = "{$url2}";n";
            }
            echo "</script>n";
        }
        else
        {
            if(!$sented = headers_sent())
                header("Refresh: 0; URL={$url}");
            if($message)
            {
                echo "<script language="JavaScript">n";
                echo "alert('{$message}');n";
                if($sented)
                    echo "window.location.href="{$url}";n";
                echo "</script>n";
            }
        }
    }

간단하게 Function이나 올릴까 해서 시작했는데
장문이 됐네요.


List of Articles
번호 제목 날짜 조회 수
208 PHP 랜덤 문자열 생성 2018.10.26 834
207 PHP XML 문서파싱 (SAX 방식 , DOM 방식) file 2018.10.26 760
206 PHP split()와 explode()의 차이점 2018.10.26 756
205 PHP eregi가 빠를까, strpos가 빠를까? 2018.10.26 766
204 PHP 확장 모듈을 이용한 C 라이브러리 사용 2018.10.26 770
203 자바스크립트 이스케이프 문자열을 PHP로 디코딩 하기 2018.10.26 729
202 이미지 땡겨와서 출력하기 2018.09.27 1204
201 DB 연동 4단 셀렉트 박스 2018.09.27 1255
200 PHP에서의 대칭 암호화/복호화 ― 간단한 예제에서 DB 입/출력까지 2018.09.14 637
199 PHP에서 자료, 데이터의 타입을 확인하는 방법, gettype() 2018.08.29 628
198 PHP에서 모든 세션 정보를 화면에 출력하는 방법 2018.08.29 629
197 한글이 깨져서 나올 때 - iconv 2018.08.29 856
196 날짜/시간함수 정리 2018.08.29 653
195 웹서버조회 소스 2018.07.24 1296
194 헤더이용 다운로드 받을시 바로열기부분 소스 2018.07.24 2082
193 키를 이용한 암호화/복호화 함수입니다. 2018.07.24 1549
192 MySQL테이블의 내용을 엑셀파일(xls)로 다운로드 하기 2018.07.24 1450
191 날짜계산 몇일까지.. [ ex)4 일전 new 표시 ] 2018.07.24 1190
190 게시판 내용 숨김 클릭시 내용 출력 [ 참고 ] 2018.07.24 1374
189 마우스 오버시 사진변환, 파일에러시 대체이미지 적용(소스일부) 2018.07.24 1323
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 13 Next
/ 13

하단 정보를 입력할 수 있습니다

© k2s0o1d4e0s2i1g5n. All Rights Reserved