본문 바로가기

비개발자의 개발 일지

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

시리즈 보기
php

PHP session — $_SESSION으로 방문 횟수 카운트 완전 정리

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

 

 

Web Development · PHP session

PHP $_SESSION —
서버에 사용자별 데이터 저장

방문 횟수를 세션에 저장 + 자동 식별
시작 오늘 분석할 코드
<?php session_start(); $count = 1; if(isset($_SESSION["count"])){ $count = $_SESSION["count"]; $count ++; } $_SESSION["count"] = $count; ?> <BODY> if($count == 1) → "처음 방문입니다." else → "당신의 방문은 N회째입니다."

cookie 코드와 거의 같지만 저장소만 다르다 — 쿠키는 브라우저, 세션은 서버.

용어 용어 정리
session_start()세션 사용 선언 — 매 페이지 첫 줄
$_SESSION서버에 저장되는 사용자별 배열
PHPSESSID사용자 식별용 쿠키 (자동 생성)
서버 저장/tmp/sess_xxx 같은 파일에 저장
유효 기간기본 24분 (gc_maxlifetime)
조작 불가사용자가 값 변경 X
vs cookie데이터 위치만 다름
실무로그인, 장바구니, 인증 토큰

1 session vs cookie — 같지만 다름
관점 cookie session
저장 위치 브라우저 서버
식별 각 쿠키 PHPSESSID 한 개로 모든 데이터
조작 가능 O X
크기 제한 4KB 실질 제한 적음
매 요청 전송 모든 쿠키 자동 ID만 전송
적합 용도 비민감 설정·트래킹 로그인·중요 데이터

2 session_start의 역할
· 처음 호출: 새 PHPSESSID 발급 + 쿠키로 브라우저에 보냄
· 두 번째 호출: 쿠키로 받은 PHPSESSID로 서버 저장소에서 데이터 로드 → $_SESSION에 채움
session_start()출력 전에 호출 (PHPSESSID 쿠키를 헤더로 보내기 위해).

3 흐름 추적
[1번째 방문] session_start() → 새 ID "abc123" 발급, 쿠키로 브라우저에 전송 $_SESSION = [] $_SESSION["count"] = 1 서버: /tmp/sess_abc123에 저장 화면: "처음 방문입니다." [2번째 방문 — 새로고침] 브라우저가 PHPSESSID=abc123 자동 첨부 session_start() → 서버에서 abc123 데이터 로드 $_SESSION = ["count" => 1] $count = 1; $count++; → 2 $_SESSION["count"] = 2 화면: "당신의 방문은 2회째입니다."

 

반응형

 

4 세션 정리
// 특정 키만 삭제 unset($_SESSION["count"]); // 모든 세션 데이터 삭제 $_SESSION = []; // 세션 자체를 종료 (로그아웃 시) session_destroy();

5 자주 하는 실수
· session_start 빠뜨려 $_SESSION이 비어있음
· 출력 후 session_start → 헤더 오류
· 매 페이지 호출 안 함 (모든 페이지에 필요)
· 무한 누적 — 사용 후 정리 안 함
· 민감 정보(평문 비밀번호) 저장 — 서버 파일 노출 시 위험

6 보안 권장
// 로그인 직후 세션 ID 갱신 (세션 고정 공격 방어) session_regenerate_id(true); // 세션 쿠키도 보안 플래그 ini_set('session.cookie_httponly', 1); ini_set('session.cookie_secure', 1); // HTTPS 환경 ini_set('session.cookie_samesite', 'Lax');

핵심 한 줄 요약

$_SESSION서버에 저장되는 사용자별 데이터
session_start()매 페이지 시작에 — 출력 전
PHPSESSID사용자 식별 쿠키 (자동)
vs cookie조작 불가, 큰 데이터 가능
사용$_SESSION["키"] = 값 으로 저장
정리unset, $_SESSION=[], session_destroy
보안로그인 시 session_regenerate_id
반응형

댓글