먼저, 세션과 쿠키는 왜 필요한걸까?
우리는 Web을 쓸 때 HTTP프로토콜을 쓰는데, HTTP프로토콜의 특징에는 Stateless, Connectionless가 있음.
Stateless : 통신이 끝나면 상태 유지 X
Connectionless : 요청과 응답 후 연결을 끊어버림.
즉, 통신을 한 번 하면 이 통신에 대한 정보를 기억하고 있지 않음.
이때 발생하는 문제점 중 하나가
"로그인 한 상태를 어떻게 유지하지?" 이다.
이를 해결하기 위해 세션과 쿠키가 필요한 것이다.
세션과 쿠키는 웹에서 인증, 인가를 위해 사용된다.
여기서, 인증과 인가란?
인증 : 사용자 신원 점검하는 프로세스
인가 : 사용자에게 권한 부여하는 프로세스
세션은 정보를 서버측에서 저장되고, 쿠키는 사용자의 브라우저 또는 클라이언트 측에서 저장된다.
서버와 쿠키에 대해 자세히 알아보자.
세션
세션은 서버에 저장된 전역변수라고 생각하면 좋다.
세션에 저장된 값은 검색을 위한 고유 ID가 할당되고, 이는 Set-Cookie에 실어서 보낸다.
응답 받은 클라이언트 측은 세션 ID를 포함하는 쿠키에 저장한다.
이제 서버가 요청할 땐 쿠키를 전송해 인증없이 식별 가능한 상태가 된다.
그러나 브러우저를 닫으면 삭제되기 때문에, 영구저장하고싶으면 DB에 넣어야 한다.
쿠키
웹서버가 클라이언트 브라우저에 저장하는 사용자 정보가 담긴 최대 크기 4KB의 작은 파일이다.
추가로 유효기간을 명시할 수 있어서 브라우저가 종료되어도 인증이 유지될 수 있다.
그러나 사용자의 정보를 실어서 보내는 방식이라 보안에 취약하다.
세션과 쿠키의 차이점
가장 큰 차이는 "정보의 저장되는 위치"이다. (세션은 사용자의 서버에, 쿠키는 클라이언트 측)
그러나 이 외에도 "보안, 속도, 라이프 사이클"의 차이가 있다.
보안 : 세션이 더 유리. (세션은 ID만 노출되니까)
속도 : 쿠키 > 세션. 세션은 ID로 서버에서 찾아야해서 쿠키보다 느림.
라이프 사이클 : 쿠키는 파일로 로컬에 저장되어 브라우저 종료 후에도 남아있을 수 있음. 그러나 세션은 브라우저 종료 시 얄짤없이 삭제됨.
cookie 퀴즈 속 코드 풀이
@app.route('/')
#웹사이트로 들어오면 index함수가 처리하도록 설정.
def index():
#사용자의 request에서 쿠키 확인.
#get('username', None) = username이란 쿠키가 존재하면 가져와서 username에 넣고, 아니면 None을 저장.
username = request.cookies.get('username', None)
#username에 값이 있으면 실행
if username:
#3번째 줄 if보면 username에 admin값이 있으면 출력.
#즉, username이란 쿠키의 값이 admin이면 됨.
return render_template('index.html', text=f'Hello {username}, {"flag is " + FLAG if username == "admin" else "you are not admin"}')
return render_template('index.html')
'SWUFORCE > 워게임' 카테고리의 다른 글
| game2 (0) | 2025.11.18 |
|---|---|
| [추가 공부]VBS 기초 문법 공부 (0) | 2025.11.11 |
| Game 01 (0) | 2025.11.11 |
| phpreg 속 php코드 공부 (0) | 2025.11.04 |
| [Web] phpreg (0) | 2025.11.04 |