헤더가있는 이전 페이지로 돌아 가기 (“위치 :”); PHP에서


124

이 질문의 제목은 내 질문을 설명합니다. PHP 페이지 방문자를 이전 페이지로 리디렉션하려면 어떻게해야합니까?header( "Location: URL of previous page" );


header ( '위치 :'. $ _SERVER [ 'HTTP_REFERER']);
raskul

이 소스에 따르면 w3schools.com/php/php_superglobals_server.asp 모든 업체가 지원하기 때문에, 그것을 신뢰할 수 없습니다입니다
mohadennis

답변:


246

시험:

header('Location: ' . $_SERVER['HTTP_REFERER']);

이것은 보안 페이지 (HTTPS)에서 작동하지 않을 수 있으며 헤더가 하이재킹되어 사용자를 다른 목적지로 보낼 수 있기 때문에 전반적으로 매우 나쁜 생각입니다. 헤더는 브라우저에서 전송되지 않을 수도 있습니다.

이상적으로는 다음 중 하나를 원할 것입니다.

  • 반환 주소를 요청에 쿼리 변수로 추가합니다 (예 :? back = / list).
  • 코드에 반환 페이지 정의 (즉, 모든 성공적인 양식 제출은 목록 페이지로 리디렉션 됨)
  • 사용자에게 다음으로 이동하려는 옵션을 제공합니다 (예 : 저장하고 편집을 계속하거나 저장 만).

19
이상한 일이 일어났습니다 :)
Dimitry

3
@Col 그래서 이것으로 실용적인 문제를 증명할 수 있습니까?
Pekka 2011 년

1
리퍼러를 사용하면 설정되고 유효한지 사전 테스트 한 후 정의 된 페이지 간 컨텍스트에서 완벽하게 수용 할 수 있습니다. 대부분의 브라우저는 적절한 HTTP_REFERER를 함께 보냅니다.
Pekka 2011 년

1
@Col 데모를 위해 무언가를해야 할 때 프로덕션에서 이것을 사용했습니다. 내 대답에서 알 수 있듯이 HTTP_REFERER를 기반으로 한 리디렉션 대신 사용할 세 가지 다른 솔루션을 제공합니다.
Dimitry 2011 년

2
정말 이상한 행동처럼 들리는 @Madmartigan, 'net에서 볼 수있는 유일한 힌트는 리디렉션 문제입니다. 어쨌든, 난 당신이 100 % 안전을해야하는 경우 리퍼러를 사용하는 방법이 아니다 동의
페카

22

너무 간단합니다.

header("location:javascript://history.go(-1)");

나를 위해 잘 작동합니다.


2
이것은 정말 영리하게 들렸지 만 FF10에서 나는 얻었습니다. "Corrupted Content Error The page you are trying to view cannot be shown because an error in the data transmission was detected."그래서 이것은 기본적으로 사용할 수 없습니다.
웨슬리 Murch

Wesley Murch, 언급 한 브라우저를 포함하여 거의 모든 주요 브라우저에서 잘 작동합니다. 역사에 뭔가가있는 페이지를 방문한 경우에만 작동합니다.
Hammad

5
이로 인해 이전 페이지가 브라우저 캐시에서 제공 될 수 있습니다.
aksu

14

어떻게 든 그 위치를 저장해야합니다.

POST 양식이라고 말하고 현재 위치를 숨겨진 필드에 넣은 다음 위치에서 사용하십시오 header().


14

약간의 추가 : exit;나머지 코드를로드하거나 실행하지 않으려는 경우 헤더 함수 뒤에 추가하는 것이 일반적이고 알려진 것입니다 .

header('Location: ' . $_SERVER['HTTP_REFERER']);
exit;

저에게는 단지 ""입니다.
Alexander Guo

2

Javascript로 시도하십시오.

 $previous = "javascript:history.go(-1)";

또는 PHP에서 시도해 볼 수 있습니다.

if(isset($_SERVER['HTTP_REFERER'])) {
    $previous = $_SERVER['HTTP_REFERER'];
}

1

세션 변수에 이전 URL을 저장하는 것은 좋지 않습니다. 사용자가 여러 페이지를 마우스 오른쪽 버튼으로 클릭 한 다음 돌아와서 저장할 수 있기 때문입니다.

세션 변수의 이전 URL을 양식의 숨겨진 필드에 저장하지 않고 헤더 ( "위치 : 호출 페이지의 URL 저장");


왜 우리는 $ _SERVER [ 'http_referrer']를 사용할 수 없습니까?
Vignesh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.