티스토리 뷰

IT/Flask

[Flask] 세션 (Sessions)

Dragonz 2020. 8. 12. 22:58
반응형

 

쿠키와 마찬가지로 세션 데이터는 클라이언트에 저장된다. 세션은 클라이언트가 서버에 로그인하고 로그아웃하는 시간 간격을 얘기한다. 이 세션에서 보관해야 하는 데이터는 클라이언트의 브라우저에 저장된다. (쿠키는 텍스트파일형태로 저장됨) 각 클라이언트의 세션에는 세션ID가 할당된다. 세션 데이터는 쿠키 위에 저장되며 서버는 쿠키에 암호화 방식으로 서명을 한다. 이 암호화를 위해 Flask 에는 정의된 sercret_key 가 필요하다.

 

파일명 : 10_session.py

from flask import Flask, session, redirect, url_for, escape, request
app = Flask(__name__)
app.secret_key = 'abcdefghijklmnopqrstuvwxyz'

@app.route('/')
def index():
    if 'username' in session:
        username = session['username']
        return 'Logged in as' + username + '<br>' + \
            "<b><a href = '/logout'>click here to log out</a></b>"

    return "You are not logged in <br><a href = '/login'></b>" + \
        "click here to log in</b></a>"

@app.route('/login', methods = ['GET', 'POST'])
def login():
    if request.method == 'POST':
        session['username'] = request.form['username']
        return redirect(url_for('index'))
    return '''
        <form action = "" method = "post">
            <p><input type = text name = username></input></p>
            <p><input type = submit value = Login></input></p>
       </form>
       '''

@app.route('/logout')
def logout():
    # 세션 내에 username 이 존재하면 제거한다.
    session.pop('username', None)
    return redirect(url_for('index'))

if __name__ == '__main__':
    app.run(debug=True)

ROOT URL 로 접근하면 username 이 설정되지 않았기때문에 로그인하라는 메세지를 표시한다. 사용자가 login 을 위해 하이퍼링크를 클릭하면 GET 방식으로 호출되기 때문에 로그인 양식을 브라우저에 출력한다. 텍스트 입력 후 Login 버튼을 클릭하면 POST 방식으로 호출되면서 세션에 username 이 설정되고, 다시 index() 함수를 호출한다. username 이 존재하기 때문에 로그인이 되었다는 메세지가 표시된다.

 

세션 내에 username 이 없으므로 로그인하라는 메세지 출력

 

텍스트 입력 후 Login 버튼을 클릭한다.

 

세션에 저장된 username 인 admin 으로 로그인 되었다는 메세지를 표시한다.

 

logout 하이퍼링크를 클릭하면 세션 내 username 이 삭제되고 초기화면으로 돌아간다.

 

반응형
댓글
공지사항