์ฟ ํค์ ํธ๋ํฝ ๋ฌธ์ ์ ์ฟ ํค๋ฅผ ๋ณ๊ฒฝํ๋ ๋ณด์์ ์ด์๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฑ์ฅ.
์ผ์ ์๊ฐ๋์ ๊ฐ์ ์ฌ์ฉ์(๋ธ๋ผ์ฐ์ )๋ก๋ถํฐ ๋ค์ด์ค๋ ์ผ๋ จ์ ์๊ตฌ๋ฅผ ํ๋์ ์ํ๋ก ๋ณด๊ณ , ๊ทธ ์ํ๋ฅผ ์ผ์ ํ๊ฒ ์ ์ง์ํค๋ ๊ธฐ์ . (์ฌ๊ธฐ์ ์ผ์ ์๊ฐ์ ๋ฐฉ๋ฌธ์๊ฐ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ํตํด ์น ์๋ฒ์ ์ ์ํ ์์ ์ผ๋ก๋ถํฐ ์น ๋ธ๋ผ์ฐ์ ๋ฅผ ์ข ๋ฃํ์ฌ ์ฐ๊ฒฐ์ ๋๋ด๋ ์์ ) ์ฆ, ๋ฐฉ๋ฌธ์๊ฐ ์น ์๋ฒ์ ์ ์ํด ์๋ ์ํ๋ฅผ ํ๋์ ๋จ์๋ก ๋ณด๊ณ ๊ทธ๊ฒ์ ์ธ์ ์ด๋ผ๊ณ ํจ.
์น ์๋ฒ์ ์น ์ปจํ ์ด๋์ ์ํ๋ฅผ ์ ์งํ๊ธฐ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ค. ์น ์๋ฒ์ ์ ์ฅ๋๋ ์ฟ ํค(=์ธ์ ์ฟ ํค). ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ซ๊ฑฐ๋, ์๋ฒ์์ ์ธ์ ์ ์ญ์ ํ์๋๋ง ์ญ์ ๊ฐ ๋๋ฏ๋ก, ์ฟ ํค๋ณด๋ค ๋น๊ต์ ๋ณด์์ด ์ข๋ค. ์ ์ฅ ๋ฐ์ดํฐ์ ์ ํ์ด ์๋ค.(์๋ฒ ์ฉ๋์ด ํ์ฉํ๋ ํ...) ๊ฐ ํด๋ผ์ด์ธํธ ๊ณ ์ Session ID๋ฅผ ๋ถ์ฌํ๋ค. Session ID๋ก ํด๋ผ์ด์ธํธ๋ฅผ ๊ตฌ๋ถํ์ฌ ๊ฐ ํด๋ผ์ด์ธํธ ์๊ตฌ์ ๋ง๋ ์๋น์ค ์ ๊ณต.
Request-Header ํ๋์ธ Cookie๋ฅผ ํ์ธ
ํ์ฌ,ํด๋ผ์ด์ธํธ๊ฐ ํด๋น session-id๋ฅผ ๋ณด๋๋์ง ํ์ธ
ํ๋ค.์๋ฒ๋ session-id๋ฅผ ์์ฑํด ํด๋ผ์ด์ธํธ์๊ฒ ๋๋ ค์ค๋ค.
# app.py
@app.route('/')
def index():
return render_template('index.html')
@app.route('/setcookie', methods = ['POST', 'GET'])
def setcookie():
if request.method == 'POST':
user = request.form['nm']
resp = make_response("Cookie Setting Complete")
resp.set_cookie('userID', user)
return resp
@app.route('/getcookie')
def getcookie():
name = request.cookies.get('userID')
return '<h1>welcome ' +name+ '</h1>'
if __name__ == '__main__':
app.run(debug = True)
# ํด๋น ํผ์ /setcookie URL๋ก ์ ์ก๋๋๋ฐ ํผ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅ๋ฐ์ ๊ฒฝ์ฐ, POST ๋ฉ์๋๋ก /setcookie์ ์ค๊ฒ ๋จ!
# index.html
<form action = "/setcookie" method = "POST">
<p><h3>Enter userID</h3></p>
<p><input type = 'text' name = 'nm'/></p>
<p><input type = 'submit' value = 'Login'/></p>
</form>
์ฟ ํค์ ๋ค๋ฅด๊ฒ ์ธ์
๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ๋ ์๋ฒ์ ์ ์ฅ
๋๋ค. ์๋ฒ์์ ๊ด๋ฆฌํ ์ ์๋ค๋ ์ ์์ ์์ ์ฑ์ด ์ข์์
๋ณดํต ๋ก๊ทธ์ธ ๊ด๋ จ์ผ๋ก ์ฌ์ฉ๋๊ณ ์๋ค. ํ๋ผ์คํฌ์์ ์ธ์
์ ๋์
๋๋ฆฌ์ ํํ๋ก ์ ์ฅ
๋๋ฉฐ ํค๋ฅผ ํตํด ํด๋น ๊ฐ์ ๋ถ๋ฌ์ฌ ์ ์๋ค. ์ธ์
์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ํด๋น ๊ฐ์ ์ํธํํ๊ธฐ ์ํ Key ๊ฐ์ ์ฝ๋์์ ์ง์
ํด์ฃผ์ด์ผ ํ๋ค.
from flask import Flask, request, session, redirect, url_for
app = Flask(__name__)
app.secret_key = 'get some sleep'
# ์ธ์
์ฌ์ฉํ๋ ค๋ฉด ํด๋น ๊ฐ์ ์ํธํํด์ฃผ๊ธฐ ์ํด Key๊ฐ์ ์ฝ๋์์ ์ง์ ํด์ค์ผํจ.
์ฝ๊ฐ ๋๋ฅธํ ์คํ๋๊น get some sleep์ผ๋ก secret_key๋ฅผ ์ง์ ํด์ฃผ๊ธฐ ใ
ใ
ใ
@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 = '/loging'></b>" + \
"click here to log in</b></a>"
# /URL: ์กฐ๊ฑด๋ฌธ if๋ฅผ ์จ์ flask ์ธ์
์ ๋ณด์์ username์ด๋ผ๋ ์ธ์
์ ๋ณด์ ์ ๋ฌด์ ๋ฐ๋ผ ๋ก๊ธด ํ๋์ง ์ํ๋์ง ํ๋จ!
# ๋งจ์ฒ์ http://127.0.0.1:5000/ ์ฌ๊ธฐ๋ก ๋ค์ด๊ฐ๋ฉด else๋ก ์ฒ๋ฆฌ๋ผ์ you are not logged in ์ฒ๋ฆฌ ๋๋ ๊ฒ.
@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>
'''
# ์ค์ ๋ก๊ทธ์ธํ๋ form์ด ์๋ /login URL.
# ๋งจ ์ฒจ ์ ์ํ์ ๋๋ GET ๋ฉ์๋๋ก ์์ฒญ์ด ์ค๋๊น ๋ก๊ธดํ๊ธฐ ์ํ ํผ ์ ์ก!
# ํผ์ ํตํด POST ์์ฒญ์ด ์ค๋ฉด username์ด๋ผ๋ ์ธ์
์ ์์ฑํ์ฌ ์
๋ ฅ๋ฐ์ ํผ์ ๋ฐ์ดํฐ๋ฅผ ์ธ์
์ ์ฅํ๊ณ ๋งจ ์ฒจ ํ์ด์ง๋ก ๋ฆฌ๋ค์ด๋ ์
ํ๊ธฐ.
@app.route('/logout')
def logout():
session.pop('username', None)
return redirect(url_for('index'))
# ๋ก๊ทธ์์๋ ํด๋น ์ธ์
์ ๋ณด๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ผ๋ก ์ฐ๊ฒฐ ๋๊ธฐ ๊ฐ๋ฅ. ์ธ์
์ ๊ฑฐ๋ pop ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋จ!!
# ์๋ฒ์ ์ธ์
๊ฐ์ด ์ ์ฅ๋์ด์๊ธฐ ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ป๋ค๊ฐ ์ผ๋ , ์ฌ๋ฌ๊ฐ๋ฅผ ์ผ๋ ์ด๋ฏธ ๋ก๊ทธ์ธ์ด ๋ ์ํ๋ก ํ์ด์ง๊ฐ ๋ณด์ฌ์ง.
# ํด๋น ์ธ์
ID ๊ฐ์ ํด๋ผ์ด์ธํธ์ ์ฟ ํค๋ก ์กด์ฌํ๋ฉฐ, ํ์ด์ง์ ๋ค์ด๊ฐ ๋๋ง๋ค ์ธ์ฆ์ ํ๊ฒ ๋๋๋ฐ, ์ด ์ฟ ํค๋ฅผ ์ง์๋ฒ๋ฆฌ๋ฉด ํด๋ผ์ด์ธํธ ์ธก๋ฉด์์๋ ๋ก๊ทธ์์๊ณผ ๊ฐ์ ํจ๊ณผ๋ฅผ ๋ณผ ์ ์์.
# ์๋ฒ ์ธก์ ์ธ์
์ ๋ณด๋ ์ฌ๋ผ์ง์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ์ฌ๋ผ์ ธ๋ฒ๋ฆฐ ์ธ์
์ ๊ณ์ ์ก๊ณ ์๊ฒ ๋๋ค. ํ๋ผ์คํฌ์์๋ ์ด๋ฐ ๊ฒฝ์ฐ๋ฅผ ๋๋นํ์ฌ ๊ฐ ์ธ์
์ ์ ํจ๊ธฐ๊ฐ์ด ์ ํด์ ธ ์์ผ๋ฉฐ ์๋ฌด ์ค์ ๋ ํ์ง ์์ ๊ฒฝ์ฐ, 31์ผ๋ก ์ค์ ๋์ด ์๋ค.
if __name__ == '__main__':
app.run(debug = True)
# ๋ง์ฝ ์ง์ ์ธ์
์ ์ ํจ๊ธฐ๊ฐ์ ์ง์ ์ค์ ํ๊ณ ์ถ๋ค๋ฉด, ์๋์ ๊ฐ์ ํจ์๋ฅผ ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค.
from datetime import timedelta
from flask import session, app
@app.before_request
def make_session_permanent():
session.permanent = True
app.permanent_session_lifetime = timedelta(minutes=5)
์ถ์ฒ1: https://hahahoho5915.tistory.com/32
์ถ์ฒ2: https://blog.naver.com/shino1025/221355012951