hy30nq's blog

Flask에서 세션과 쿠키 활용하기 본문

Web/web dev

Flask에서 세션과 쿠키 활용하기

hy30nq 2024. 6. 17. 23:24
728x90

안녕하세요! 오늘은 웹 애플리케이션 개발에 중요한 세션과 쿠키에 대해 알아보겠습니다. 특히 Flask를 사용한 예시로 이해하기 쉽게 설명드릴게요.

세션과 쿠키란?

먼저, 웹은 기본적으로 상태를 유지하지 않습니다(stateless). 그래서 사용자가 로그인했는지, 어떤 정보를 입력했는지 기억하려면 세션과 쿠키를 활용해야 해요.

  • 세션(Session): 서버에 사용자 정보를 저장해요. 각 사용자는 고유한 세션 ID를 가지고 있어요.
  • 쿠키(Cookie): 클라이언트(사용자의 브라우저)에 저장되는 작은 데이터 파일이에요. 세션 ID와 같은 정보를 저장해요.

필요성

세션과 쿠키는 다음과 같은 이유로 필요해요:

  • 상태 유지: 사용자가 로그인 상태를 유지할 수 있어요.
  • 사용자 경험 향상: 사용자가 이전에 입력한 정보를 기억할 수 있어요.
  • 보안과 관리 용이성: 중요한 정보를 서버에서 관리할 수 있어요.
  • 트래킹과 분석: 사용자 행동을 분석하고 맞춤형 서비스를 제공할 수 있어요.

Flask에서 세션 객체 사용법

Flask에서는 세션 객체를 사용해 쉽게 세션 데이터를 관리할 수 있어요.

from flask import Flask, session, abort

app = Flask(__name__)

app.secret_key = 'test'

@app.route('/set_session')
def set_session():
  session['username'] = 'techq'
  return '세션에 사용자 이름이 설정 되어 있습니다.'

@app.route('/get_session')
def get_session():
  username = session.get('username')
  if username : 
    return f'사용자 이름 : {username}'
  else :
    return '사용자 이름이 세션에 설정되어 있지 않습니다.'
  
@app.route('/protected')
def protected():
  if 'username' not in session:
    abort(403)
    return '이 페이지는 로그인한 사용자만 볼 수 있습니다.'
  else:
    return '로그인이 된 페이지 입니다.'

세션 데이터 조작하기

  • 세션 데이터 저장: session['user_id'] = 42
  • 세션 데이터 조회: user_id = session.get('user_id')
  • 세션 데이터 삭제: session.pop('user_id', None)
  • 세션 데이터 존재 여부 확인: is_logged_in = 'user_id' in session
  • 모든 세션 데이터 삭제: session.clear()
  • 세션 데이터 수정 명시: session.modified = True

Flask에서 쿠키 설정하기

쿠키를 설정하려면 make_response를 사용해요. HTTP 응답 객체가 필요하기 때문이에요.

from flask import Flask, make_response, request, abort

app = Flask(__name__)

@app.route('/set_cookie')
def set_cookie():
  resp = make_response('쿠키를 설정합니다.')
  resp.set_cookie('username', 'techq')
  return resp

@app.route('/get_cookie')
def get_cookie():
  username = request.cookies.get('username', '게스트')
  return f'쿠키로부터 얻은 사용자 이름 : {username}'

@app.route('/secret')
def secret():
  username = request.cookies.get('username')
  if not username:
    abort(403, description="접근 권한이 없습니다. 먼저 쿠키를 설정해주세요")
  return f"환영합니다, {username}님! 비밀 페이지에 접속했습니다."

@app.route('/delete_cookie')
def delete_cookie():
  resp = make_response('쿠키를 삭제합니다.')
  resp.delete_cookie('username')
  return resp

쿠키 설정 옵션

  • max_age: 쿠키의 유지 시간을 설정해요. 예: resp.set_cookie('username', 'techq', max_age=60*60*24*7) (7일)
  • expires: 쿠키의 만료 날짜와 시간을 설정해요. 예: resp.set_cookie('username', 'techq', expires=datetime.datetime(2027, 11, 7))
  • path: 쿠키의 유효 경로를 설정해요. 예: resp.set_cookie('username', 'techq', path='/app')
  • domain: 쿠키가 유효한 도메인을 설정해요. 예: resp.set_cookie('username', 'techq', domain='.example.com')
  • secure: HTTPS 연결에서만 쿠키가 전송되도록 설정해요. 예: resp.set_cookie('username', 'techq', secure=True)
  • httponly: 웹 서버를 통해서만 쿠키에 접근할 수 있게 설정해요. 예: resp.set_cookie('username', 'techq', httponly=True)

마무리

이렇게 Flask에서 세션과 쿠키를 활용하는 방법을 알아보았어요. 이를 통해 사용자 경험을 향상시키고, 보안성을 높일 수 있어요. 더 궁금한 점이 있으면 언제든지 댓글로 남겨주세요!

728x90