사이트 내 전체검색
PHP
[php] 페이지간 변수 전달... 리다이렉션 방법의 여러가지
로빈아빠
https://cmd.kr/php/447 URL이 복사되었습니다.

본문

페이지간 변수 전달... 리다이렉션 방법의 여러가지
 
요즘 쇼핑몰 프로그램 하나 짜고 있다보니 페이지간에 변수 전달할 일이 무척 많군요. 다른 분들이 추천해주시지 않은 방법이 하나 있어서, 혹시 모르는 분들은 참고하시라고 이렇게 글을 남깁니다.
(이 방법은 버튼을 눌렀을 때 변수를 전달하는 것이 아니라 프로그램 실행시 조건에 따라 분기할 때 프로그램 사이 변수전달하는 방법에 대한 것 입니다.)

다른 분들이 소개해준 방법들은 약 3가지로 압축이 됩니다.
1. 자바스크립트를 사용하여
echo ("<script>location.href='page.php3'</script>") ;

2. 헤더 함수를 이용하여
<?php 
Header("Location:page.php3") ; 
?> 

3. 메타 태그를 이용하여
echo ("<meta http-equiv='refresh' content='0; url=./index.html'>") ;


이것은 다른 분들이 알려주신 걸로, 위 3가지 방법은 각각 장단점이 있습니다.

1번은 브라우저의 메모리에 남아서 뒤로가기가 잘 안된다는 겁니다.
예를들어 장바구니 프로그램을 처리할 때 실제 장바구니 화면을 보여주기 전에 DB에 자료를 넣어주는 선행 프로그램이 필요한데, 위 1과 같은 방법으로 장바구니 선행 프로그램에서 장바구니 프로그램을 호출하면, 고객은 장바구니 화면을 보기전 프로그램, 예를들면 상품상세보기 프로그램 같은 것, 을 보지 못하고 자꾸 장바구니 프로그램으로 되돌아오는 수난을 겪게됩니다.
즉, 장바구니 화면에서 브라우저 뒤로가기를 누르면 장바구니 선행 프로그램이 동작하여 장바구니 화면을 자꾸 호출하는 겁니다.
이 방법에서도 2번 처럼 get 방식의 변수 전달이 가능합니다.

2번도 많이 사용하신다고 하지만, 활용도가 적은 것 같습니다.
어떤 헤더 정보보다도 먼저 전송되어야 하기 때문에, 고급 쇼핑몰 프로그램을 짜려면 여러 변수를 프로그램 맨 처음에서 DB를 연결하여 받아야 하는데 이런 경우 동작이 되지않습니다. 그저 단순 리다이렉션에서 사용할 수 있습니다.
물론 page.php3?aa=bb 와 같이 get 방식으로 변수 전달도 가능합니다.

3번의 경우를 저는 가장 많이 사용합니다. 1번 같은 문제도 없고, 2번 처럼 까다롭지도 않습니다. 또 2번처럼 get 방식으로 변수 전달도 가능합니다.

그런데 위 3가지 방법 중 post 방법으로 변수를 전달하는 방법은 하나도 없더군요.
아시다시피 get 방식은 서버에서 변수와 그 값이 모니터링될 수 있기 때문에 보안에 문제가 있습니다.
또한 악의적인 사용자가 프로그램을 실행하면서 변수를 임의로 넣을 수 있습니다.
예를들어 로그인 프로그램을 짜면서 db에서 사용자가 입력한 id와 passwd를 선행 프로그램(ex: ck_login.php)확인한 후 다음 프로그램에(ex: order.php) 인증 변수를 order.php?yn=ok 라고 넘기면 인증이 될 경우, 만약 소스를 아는 악의적인 사용자가 order.php?yn=ok 라고 url에 직접 넣어 실행시키면 인증이 되어버린다는 겁니다.(물론 이렇게 단순하게 프로그램 짜시는 분은 없겠지만 이것은 어디까지나 예입니다.)

그래서 저는 다음과 같은 방법을 사용합니다.

4. 역시 자바스크립트를 이용한 방법이지만 다음과 같이...
echo (" 
<body onload='window.document.fc.submit ()'> 
<form name='fc' action='./php_pro.php'  method='post' > 
<input name=fcurl type=hidden value='./basket.php'> 
<input name=fwr type=hidden value='smile'> 
</form> 
</body> 
") 


이렇게 하면 post 방법으로 변수를 보낼 수 있고 게다가 input 태그만 추가하면 얼마든지 많은 양의 변수를 보낼 수 있습니다. 게다가 약간의 트릭을 써서 get으로 넘어오는 모든 변수를 막으면 보안도 문제가 없습니다.( 저는 몽아님이 말씀해 주신 방법을 사용하고 있습니다.)
제가 사용해본 결과 큰 문제는 없이 잘 실행되었습니다만, 1번과 같이 브라우저의 뒤로가기 버튼이 제대로 동작을 안하게될 가능성이 있습니다.
그래서 저는 단순히 이동을 할 경우는 메타택을 이용한 방법을 사용하고 여러 변수와 함게 이동을 할 경우는 위 4번 방법을 사용하는데, 아직까지 제 프로그램에서는 쿠키 셋팅을 할 때만 위 방법을 사용하기 때문에 뒤로가기에 문제가 되었던 적은 없습니다.

댓글목록

등록된 댓글이 없습니다.

PHP
871 (11/18P)

Search

Copyright © Cmd 명령어 3.15.203.242