Flask

[Flask] Session

땅콩새싹 2020. 9. 26. 16:58
반응형

 


 

Session의 데이터는 Cookie와는 다르게 서버에 저장됩니다. Session의 데이터는 서버에서 관리하기 때문에 Cookie보다 안정성이 좋아서 보통 로그인처럼 보안이 높아야 하는 시스템에 사용됩니다.

Flask에서 Session은 Dictionary형태로 저장됩니다. Session을 사용할 때는 해당 값을 암호화하기 위한 Key값을 코드에 지정해 주어야 하고 Key를 통해 해당 값을 불러올 수 있습니다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from flask import Flask, url_for
from flask import render_template
from flask import request, make_response
from flask import session, redirect, escape
 
app = Flask(__name__)
app.secret_key = 'any random string'
 
@app.route('/')
def index():
    if 'username' in session:
       username = session['username']
       return '당신은 ' + username + '입니다.<br>' +\
           "<b><a href = '/logout'>로그아웃</a></b>"
    return "로그인이 되어있지 않습니다. <br><a href = '/login'> 로그인!</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" /></p>
      <p><input type = "submit" value = "Login" /></p>
   </form>
'''
 
@app.route('/logout')
def logout():
   session.pop('username'None)
   return redirect(url_for('index'))
 
if __name__ == '__main__' :
    app.run(host = '0.0.0.0', port = 80, debug = True)

<app.py>

Session을 사용하기 위해 'app.secret_key'로 Key value를 지정해 줍니다.

localhost로 접속하면 처음에는 'username'변수에 아무 값도 저장되어 있지 않기 때문에

바로 return으로 반환되는 값이 실행됩니다.

 

Session에 값이 없을 때

여기서 로그인 버튼을 누르게 되면 login() 함수가 실행됩니다.

여기서 'username' 변수에 값은 POST형식으로 들어오게 되고 여기서는 template 없이 return 반환 값에서 바로 html 코드를 주석 문으로 실행시켜줍니다. POST형식으로 전달되기 때문에 request.form을 통해 값을 Session에 저장시켜주고 index로 redirect 해줍니다.

다시 index로 돌아가면 이제 Session에 username을 입력받았기 때문에 '당신은 ~입니다'라고 출력됩니다.

localhost/login

 

Session에 값이 저장됨

 

여기서 로그아웃을 누르게 되면 logout() 함수가 실행되고 session.pop을 통해 'username'변수에 저장돼 있던 값을 삭제시켜줍니다. 그리고 다시 index로 돌아가게 하면 'username'에 저장되었던 값을 삭제했기 때문에 처음 실행시켰을 때로 돌아가게 됩니다.

반응형