Flask(4)
Cookieとセッション
🐤 クッキー
🌈 Cookieの操作手順
リクエストページとともにCookieを送信します.
🐤 セッション
Cookieのトラフィックの問題を解決し、Cookieのセキュリティの問題を変更するために発生します.
同じユーザ(ブラウザ)からの一連の要件を一定期間ステータスと見なし、一貫性を保つ技術.(ここで、しばらくの間、アクセス者は、Webブラウザを介してWebサーバに接続された点からWebブラウザを終了して接続を終了する)、すなわち、アクセス者は、Webサーバに接続された状態をセッションと呼ぶユニットと見なす.
Webサーバには、Webコンテナの状態を保持するための情報が格納される.Webサーバに格納されているCookie(=セッションCookie).ブラウザを閉じたり、サーバからセッションを削除したりする場合にのみ削除されるため、Cookieよりもセキュリティが優れています.格納データに制限はありません.(サーバ容量が許可されている限り...)各クライアントに一意のセッションIDを付与する.セッションIDを使用してクライアントを区別し、各クライアントのニーズを満たす.
🌈 セッションの操作順序
Request-Header 필드인 Cookie를 확인
である.클라이언트가 해당 session-id를 보냈는지 확인
.서버는 session-id를 생성해 클라이언트에게 돌려준다.
Cookieとセッションの違い(表!)
🐤 Webページからフォームを受信し、Cookieをクライアントに渡すコード。
# 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>
🐤 セッションコード
Cookieとは異なり、セッション関連のデータは
서버에 저장
である.サーバが管理できる観点から、안전성이 좋아서
は通常ログインに使用される.フラスコでは、セッション数は딕셔너리의 형태로 저장
であり、この値は鍵によって取得することができる.セッションを使用するには、해당 값을 암호화하기 위한 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)
ソース2:https://blog.naver.com/shino1025/221355012951
Reference
この問題について(Flask(4)), 我々は、より多くの情報をここで見つけました https://velog.io/@majaeh43/Flask6テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol