본문 바로가기

비개발자의 개발 일지

현장 팀장에서 수출 ERP까지 — AI와 함께 시스템을 만든 기록

시리즈 보기
php

PHP cookie — setcookie와 $_COOKIE로 방문 횟수 카운트 완전 정리

by 왕진 2026. 6. 17.
반응형

 

 

Web Development · PHP cookie

PHP 쿠키 —
브라우저에 데이터를 잠시 저장하기

방문 횟수를 쿠키에 저장 + 10초 만료
시작 오늘 분석할 코드
<?php $count = 1; if(isset($_COOKIE["count"])){ $count = $_COOKIE["count"]; $count ++; } setcookie("count", $count, time() + 10); // 10초 만료의 count 쿠키 설정 ?> <BODY> if($count == 1) → "첫 방문입니다." else → "당신의 방문은 N 번째입니다."

브라우저가 보내는 $_COOKIE에서 count를 읽고, +1해서 다시 setcookie로 갱신. 10초 안에 새로고침하면 카운트가 올라간다.

용어 용어 정리
setcookie()쿠키 설정 — 응답 헤더로 전송
$_COOKIE브라우저가 보낸 쿠키 슈퍼글로벌 배열
만료 시간setcookie 3번째 인자 — Unix timestamp
time() + 10지금부터 10초 뒤 만료
클라이언트 저장브라우저가 보관 — 매 요청 자동 첨부
vs 세션세션은 서버, 쿠키는 클라이언트
조작 가능사용자가 쿠키 값 바꿀 수 있음
출력 전 호출setcookie도 헤더라 출력 전에

1 setcookie 매개변수
setcookie(이름, 값, 만료, 경로, 도메인, secure, httponly) // ↑ ↑ ↑ // 필수 필수 Unix 타임스탬프 setcookie("count", 5, time() + 10); // 10초 후 만료 setcookie("user", "kim", time() + 86400); // 1일

2 쓰기와 읽기는 다른 시점
setcookie로 쓴 값은 다음 요청부터 $_COOKIE에 들어온다. 같은 요청 안에선 안 보인다.
// 처음 호출 — $_COOKIE는 비어있음 $count = 1; if (isset($_COOKIE["count"])) { ... 안 들어감 ... } setcookie("count", $count, time() + 10); // 응답 헤더로 쿠키 설정 명령 전송 // 두 번째 호출 (10초 안 새로고침) // 브라우저가 count=1 쿠키 첨부 $count = $_COOKIE["count"]; // 1 $count++; // 2 setcookie("count", 2, ...); // 갱신

3 만료 시간의 의미
설정 효과
생략 또는 0 세션 쿠키 — 브라우저 닫으면 사라짐
time() + N N초 후 만료
time() - 1 이미 과거 → 쿠키 즉시 삭제
time() + 86400 * 30 30일

 

반응형

 

4 쿠키 vs 세션
관점 쿠키 세션
저장 위치 브라우저 서버
크기 제한 4KB 정도 실질 제한 적음
매 요청 전송 O (자동) X (세션 ID만)
조작 가능 불가
지속 시간 설정 가능 기본 24분
적합 용도 설정·테마·트래킹 로그인·중요 데이터

5 보안 옵션
setcookie("name", $value, [ 'expires' => time() + 86400, 'path' => '/', 'secure' => true, // HTTPS에서만 전송 'httponly' => true, // JS에서 접근 불가 (XSS 방어) 'samesite' => 'Lax', // CSRF 방어 ]);

6 자주 하는 실수
· 출력 후 setcookie → 헤더 오류
· 같은 요청에서 즉시 $_COOKIE에 들어올 거라 기대
· 민감 데이터(비밀번호 등)를 쿠키에 저장 — 위험
· 만료 시간 안 지정 → 브라우저 닫으면 사라짐
· httponly 플래그 안 줘서 XSS로 쿠키 탈취 가능

핵심 한 줄 요약

setcookie()브라우저에 쿠키 저장 명령
$_COOKIE브라우저가 보낸 쿠키 읽기
만료 = time() + N초초 단위 미래 타임스탬프
출력 전 호출echo·HTML 한 글자 전에
vs 세션쿠키는 클라이언트, 세션은 서버
크기4KB 정도 — 큰 데이터는 세션
보안httponly + secure + samesite 플래그
반응형

댓글