▶ 뭉충닷컴
 
mungchung.com login
Site Search
My Space
주절주절...
공부방
쥔장소개
Board
자유게시판
유용한 정보
자료실
Programming
강좌 & Articles
Spring 3.0
프로그래밍 Tip
   -ASP
   -PHP
   -JavaScript
   -HTML
   -Java/JSP
   -Database
   -Crystal Report
   -Visual Basic
   -이클립스
   -리눅스
   -기타
Windows API (VB)
Spread Sheet 7.0
컴퓨터활용 Tip
Other things
StarCraft 전략
StarCraft 문서
김용(金庸)
Son Q & Dieda
좋은팁이 올라와서 퍼온다.
출처 : http://www.phpschool.com/gnuboard4/bbs/board.php?bo_table=tipntech&wr_id=46850&page=1

------------------------------------------------------------------------------------------------



칼솜님이 Q&A(PHP Function)에 올리신 내용을 보고
같은 문제를 많은 분들이 고민하고 계실거라 생각되어 공유합니다.

브로우저의 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이나 올릴까 해서 시작했는데
장문이 됐네요.

키워드 추가 :
response.redirect
refresh
location
meta
replace
reload
Back
문서 첨부 제한 : 0Byte/ 2.00MB
파일 크기 제한 : 2.00MB (허용 확장자 : *.*)
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 DataBase 질문글은 자유게시판에 작성해 주세요. 뭉충닷컴 2005-09-24 113096
6 PHP php 문법 성능 측정 뭉충닷컴 2010-01-29 11479
5 PHP php용 디자인 패턴 소스 뭉충닷컴 2009-06-17 12427
» PHP 오류 메시지 출력(alert) 및 페이지 이동(refresh) 관련 뭉충닷컴 2006-06-25 12603
3 PHP TDC를 이용한 PHP, ASP 게시물 페이징 방법 file 뭉충닷컴 2004-08-11 8449
2 PHP 파일의 내용을 읽어서 줄단위로 뿌려주는 함수 뭉충닷컴 2004-07-09 9377
1 PHP 간단한 다중 파일 업로드 [1] 뭉충닷컴 2004-07-06 13872