Session
기본 정보
- 명칭: Session
- 한글명: 세션
- 분류: 서버 기반 사용자 상태 관리
- 주요 용도: 로그인 인증 및 사용자 정보 유지
- 관련 주제: #Session #Cookie #인증 #PHP #보안
개요
Session(세션)은 사용자의 상태(State)를 서버에 저장하여 로그인 정보와 사용자 데이터를 유지하는 기술이다.
웹은 기본적으로 Stateless(무상태) 프로토콜인 HTTP를 사용하기 때문에 페이지를 이동하면 사용자를 기억하지 못한다. 이를 해결하기 위해 Session과 Cookie를 함께 사용한다.
로그인 후에도 사용자가 계속 인증된 상태를 유지할 수 있는 이유가 바로 Session 때문이다.
Session 구조
사용자
↓
브라우저
↓
Session ID (Cookie)
↓
웹 서버
↓
Session 저장소
↓
사용자 정보
동작 과정
로그인 요청
↓
아이디/비밀번호 확인
↓
Session 생성
↓
Session ID 발급
↓
Cookie 저장
↓
다음 요청
↓
Session ID 전송
↓
서버 인증
↓
응답
Session과 Cookie 관계
Browser
↓
Cookie
(Session ID)
↓
Server
↓
Session Data
브라우저에는 Session ID만 저장되고, 실제 사용자 정보는 서버에 저장된다.
PHP Session 시작
<?php
session_start();
?>
세션을 사용하기 전에 반드시 호출해야 한다.
Session 저장
$_SESSION['mb_id']
=
'admin';
Session 조회
echo
$_SESSION['mb_id'];
Session 삭제
특정 값 삭제
unset(
$_SESSION['mb_id']
);
전체 삭제
session_destroy();
로그아웃 시 주로 사용된다.
로그인 예제
session_start();
$_SESSION['login']
=
true;
$_SESSION['user']
=
'구름';
로그인 확인
if(
isset(
$_SESSION['login']
)
){
echo "로그인";
}
Session 저장 위치
대표 위치
Linux
/var/lib/php/sessions/
Windows
C:\Windows\Temp\
또는 Redis, Memcached, Database 등에 저장하기도 한다.
Session ID
예시
8d4a7f91a2b1c...
브라우저의 Cookie에 저장되며 서버에서 사용자를 식별하는 키 역할을 한다.
Session Timeout
일정 시간 동안 요청이 없으면 세션이 만료된다.
예시
30분
1시간
2시간
PHP 설정
session.gc_maxlifetime=1440
Session과 JWT 비교
| Session | JWT |
|---|---|
| 서버 저장 | 클라이언트 저장 |
| Stateful | Stateless |
| 서버 메모리 사용 | 서버 메모리 사용 적음 |
| 강제 로그아웃 가능 | 발급 후 즉시 폐기 어려움 |
| 전통 웹에 적합 | 모바일/API에 적합 |
Session과 Cookie 비교
| Session | Cookie |
|---|---|
| 서버 저장 | 브라우저 저장 |
| 보안 우수 | 변조 위험 |
| 용량 제한 적음 | 약 4KB 제한 |
| 로그인 관리 | 사용자 설정 저장 |
Session 장점
- 서버에서 관리
- 보안성이 높음
- 강제 로그아웃 가능
- 민감한 정보 노출 방지
- 구현이 간단함
Session 단점
- 서버 메모리 사용
- 서버 확장 시 Session 공유 필요
- 대규모 서비스에서는 관리 비용 증가
- 서버 장애 시 세션 손실 가능
Session 공유
다중 서버 환경에서는 다음 기술을 사용한다.
Web1
↓
Redis
↑
Web2
대표 기술
- Redis
- Memcached
- Database
Session Hijacking
공격자가 Session ID를 탈취하여 로그인 상태를 가로채는 공격이다.
예방 방법
- HTTPS 사용
- Session ID 재발급
- HttpOnly Cookie
- Secure Cookie
- SameSite 설정
Session Fixation
로그인 전 Session ID를 유지하여 공격하는 기법이다.
예방
session_regenerate_id(
true
);
로그인 성공 후 Session ID를 새로 생성하는 것이 권장된다.
Cookie 설정
session_set_cookie_params([
"httponly"=>true,
"secure"=>true,
"samesite"=>"Lax"
]);
보안 강화를 위해 자주 사용된다.
대표 활용 분야
- 로그인 인증
- 관리자 페이지
- ERP
- 쇼핑몰
- 커뮤니티
- 게시판
- CMS
- 그룹웨어
실무 메모
실무에서는 다음과 같은 방식이 권장된다.
- 로그인 후
session_regenerate_id(true)호출 - HttpOnly Cookie 적용
- HTTPS 환경에서 Secure Cookie 사용
- SameSite=Lax 또는 Strict 적용
- Session Timeout 설정
- Redis 기반 Session 공유
- 로그아웃 시
session_destroy()수행 - 민감한 정보는 Session에도 최소한만 저장
- IP 또는 User-Agent 검증 고려
- 장시간 미사용 시 자동 로그아웃 구현
Session과 함께 사용하는 기술
대표 활용 사례
- PHP 로그인 시스템
- 그누보드 회원 인증
- 워드프레스 관리자 로그인
- ERP 로그인
- 쇼핑몰 회원 관리
- 관리자(Admin) 페이지
- 사내 그룹웨어
- CMS 로그인
관련 문서
출처
- PHP 공식 문서 - Sessions
- MDN Web Docs - Cookies
- OWASP Session Management Cheat Sheet