반응형
Web Development · PHP header Location
PHP header("Location:...") —
다른 URL로 자동 이동
로그인 후 마이페이지로, 처리 완료 후 목록 페이지로
시작 오늘 분석할 코드
<?php header("Location:http://www.naver.com/"); // 브라우저에 "이 주소로 이동하라"는 응답 헤더 전송 exit; ?>
이 코드를 실행하는 순간 브라우저는 네이버로 자동 이동한다. 사용자에게는 PHP 페이지가 보이지도 않는다.
용어 용어 정리
header()HTTP 응답 헤더를 보내는 함수
Location"이 URL로 이동하라"는 헤더
리다이렉트자동 페이지 이동
exit / die스크립트 즉시 종료
302 (기본)임시 이동 — 검색엔진 인덱스 유지
301영구 이동 — 검색엔진이 새 주소로 갱신
출력 전 호출한 글자라도 출력했으면 실패
실무로그인 후 이동, 폼 제출 후 이동
1 exit는 왜 필요한가?
header를 호출해도 PHP는 그 아래 코드를 계속 실행한다. 이걸 막지 않으면 의도치 않은 처리가 일어날 수 있다.
if (!$loggedIn) { header("Location: login.php"); // exit가 없으면 ↓ deleteUserAccount(); // 비로그인 상태인데 실행됨! exit; // 여기로 와도 늦음 } // 안전한 패턴 if (!$loggedIn) { header("Location: login.php"); exit; } deleteUserAccount();
2 "headers already sent" 오류
※
header는 HTML이 한 글자라도 출력되기 전에 호출해야 한다. echo·print는 물론, PHP 시작 태그 앞의 빈 줄도 출력으로 간주된다.// 잘못된 예 <html> <?php header("Location: ..."); // 이미 <html> 출력됨 → 오류 ?> // 올바른 예 <?php header("Location: ..."); exit; ?>
3 301 영구 vs 302 임시
// 임시 이동 (기본) header("Location: /new", true, 302); // 영구 이동 (검색엔진에 새 주소 알림) header("Location: /new", true, 301);
반응형
4 활용 시나리오
// 1. 로그인 후 마이페이지로 $_SESSION['user'] = $user; header("Location: /mypage.php"); exit; // 2. 폼 제출 후 새로고침 방지 (PRG 패턴) saveData($_POST); header("Location: /thanks.php"); exit; // 3. 권한 없으면 로그인 페이지로 if (!isLoggedIn()) { header("Location: /login.php"); exit; }
5 자주 하는 실수
·
· 출력 후 호출 → "headers already sent"
· 사용자 입력을 그대로 Location에 → 오픈 리다이렉트 취약점
· 같은 페이지로 무한 리다이렉트 (조건문 함정)
exit 빼먹음 → 아래 코드도 실행· 출력 후 호출 → "headers already sent"
· 사용자 입력을 그대로 Location에 → 오픈 리다이렉트 취약점
· 같은 페이지로 무한 리다이렉트 (조건문 함정)
핵심 한 줄 요약
header("Location:...")브라우저에 이동 지시
exit;반드시 함께 — 아래 코드 차단
출력 전 호출echo/HTML 한 글자도 안 됨
302 / 301임시 / 영구 이동
PRG 패턴POST → Redirect → GET (새로고침 방지)
활용로그인 후, 폼 제출 후, 권한 없을 때
보안사용자 입력을 URL에 그대로 X
반응형
'php' 카테고리의 다른 글
| PHP preg_match — 정규식 패턴 검사 완전 정리 (0) | 2026.06.16 |
|---|---|
| PHP mb_convert_encoding — 문자열 인코딩 변환 완전 정리 (0) | 2026.06.16 |
| PHP pathinfo — 파일 경로의 디렉토리·이름·확장자 추출 완전 정리 (0) | 2026.06.16 |
| PHP rmdir — 빈 폴더 삭제 완전 정리 (0) | 2026.06.16 |
| PHP mkdir — 폴더 생성 완전 정리 (0) | 2026.06.16 |
왕진 블로그

댓글