[python] 사용자 세션 유지하기

웹 어플리케이션을 개발하다 보면 사용자의 세션을 유지해야 할 때가 있습니다. 세션을 유지한다는 것은 사용자가 로그인한 상태를 유지하기 위해 서버에서 사용자의 정보를 저장하고 추적하는 것을 말합니다. Python을 사용하여 사용자 세션을 유지하는 방법에 대해 알아보겠습니다.

Flask를 사용한 세션 유지

Flask는 Python으로 웹 어플리케이션을 개발하기 위한 간단하고 가벼운 프레임워크입니다. Flask를 사용하여 세션을 유지하는 방법을 알아보겠습니다.

먼저 Flask를 설치해야 합니다.

pip install flask

다음은 Flask로 세션을 유지하기 위한 간단한 예제 코드입니다.

from flask import Flask, session

app = Flask(__name__)
app.secret_key = 'supersecretkey'

@app.route('/')
def home():
    # 세션이 없다면 로그인 페이지로 리다이렉트
    if 'user' not in session:
        return redirect('/login')
    
    # 세션에 저장된 사용자 정보 출력
    return f"Welcome back, {session['user']}!"

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        # 로그인 폼에서 사용자 정보 확인 후 세션에 저장
        user = request.form['username']
        session['user'] = user
        return redirect('/')
    
    # 로그인 폼 반환
    return render_template('login.html')

@app.route('/logout')
def logout():
    # 세션에서 사용자 정보 제거
    session.pop('user', None)
    return redirect('/login')

위 예제 코드에서 app.secret_key는 애플리케이션의 세션 데이터를 암호화하는 데 사용되는 키입니다. session 객체는 사용자의 세션을 저장하고 추적하는 데 사용됩니다.

home 라우트 함수에서는 세션에 사용자 정보가 있는지 확인한 후 환영 메시지를 출력합니다. 만약 세션에 사용자 정보가 없다면 로그인 페이지로 리다이렉트합니다.

login 라우트 함수에서는 POST 요청으로 사용자 정보를 받아 세션에 저장합니다. 로그인 폼을 제출하면 세션에 사용자 정보가 저장되고 메인 페이지로 리다이렉트됩니다.

logout 라우트 함수에서는 세션에서 사용자 정보를 제거한 후 로그인 페이지로 리다이렉트합니다.

이렇게 간단한 예제로 Flask를 사용하여 사용자 세션을 유지하는 방법을 알아보았습니다.

Django를 사용한 세션 유지

Django는 Python으로 웹 어플리케이션을 개발하기 위한 강력한 프레임워크입니다. Django를 사용하여 세션을 유지하는 방법을 알아보겠습니다.

먼저 Django를 설치해야 합니다.

pip install django

다음은 Django로 세션을 유지하기 위한 간단한 예제 코드입니다.

# settings.py

SESSION_ENGINE = 'django.contrib.sessions.backends.db'
SESSION_COOKIE_SECURE = True
SESSION_COOKIE_HTTPONLY = True
# views.py

from django.shortcuts import render, redirect
from django.contrib.sessions.models import Session

def home(request):
    # 세션이 없다면 로그인 페이지로 리다이렉트
    if 'user' not in request.session:
        return redirect('/login')
    
    # 세션에 저장된 사용자 정보 출력
    return render(request, 'home.html', {'user': request.session['user']})

def login(request):
    if request.method == 'POST':
        # 로그인 폼에서 사용자 정보 확인 후 세션에 저장
        user = request.POST['username']
        request.session['user'] = user
        return redirect('/')
    
    # 로그인 폼 반환
    return render(request, 'login.html')

def logout(request):
    # 세션에서 사용자 정보 제거
    request.session.pop('user', None)
    return redirect('/login')

위 예제 코드에서는 SESSION_ENGINESESSION_COOKIE_SECURE, SESSION_COOKIE_HTTPONLY를 설정하여 세션 데이터를 보안하고 안전하게 저장합니다.

home 뷰 함수에서는 세션에 사용자 정보가 있는지 확인한 후 환영 페이지를 렌더링합니다. 만약 세션에 사용자 정보가 없다면 로그인 페이지로 리다이렉트됩니다.

login 뷰 함수에서는 POST 요청으로 사용자 정보를 받아 세션에 저장합니다. 로그인 폼을 제출하면 세션에 사용자 정보가 저장되고 메인 페이지로 리다이렉트됩니다.

logout 뷰 함수에서는 세션에서 사용자 정보를 제거한 후 로그인 페이지로 리다이렉트합니다.

이와 같은 방법으로 Django를 사용하여 사용자 세션을 유지할 수 있습니다.


참고 문서: