【Flask】Session에 대해서

Session 정보



Session은 간단히 말하면 로컬의 간이 데이터베이스다. JavaScript로 말하면 localstorage 같은 것이다. Session을 사용하면 데이터베이스에 데이터를 저장할 필요가 없으며 데이터를 가져올 수 있습니다. 또한 데이터베이스에 여러 번 액세스 할 필요가 없습니다.

계층



이번에는 가상 환경을 사용하고 있기 때문에 가상 환경을 사용하지 않는 경우 venv 파일은 무시해도 좋다.


프로그램 코드



app.py
from flask import Flask, redirect, url_for, render_template, request, session #session追加
from datetime import timedelta #時間情報を用いるため

app = Flask(__name__)

app.secret_key = 'user'
app.permanent_session_lifetime = timedelta(minutes=5) # -> 5分 #(days=5) -> 5日保存

@app.route("/")
def home():
  return render_template("index.html")

@app.route("/login", methods = ["POST", "GET"])
def login():
  #データベースに情報を送るとき
  if request.method == "POST":
    session.permanent = True  # <--- makes the permanent session
    user = request.form["nm"] #ユーザー情報を保存する
    session["user"] = user #sessionにuser情報を保存
    return redirect(url_for("user"))
  else: #情報を受け取るとき
    if "user" in session: #sessionにユーザー情報があったとき
      return redirect(url_for("user")) #userページに遷移
    return render_template("login.html") #sessionにユーザー情報がなかったときはloginページに遷移

@app.route("/user")
def user():
  if "user" in session:
    user = session["user"] #sessionからユーザー情報をとってくる
    return f"<h1>{user}</h1>"
  else:
    return redirect(url_for("login"))

@app.route("/logout") #ログアウトする
def logout():
  session.pop("user", None) #削除
  return redirect(url_for("login"))

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

session은 사전형이며, 이번에는 session에 키를 "user", 값을 입력한 사용자 이름을 설정한다.

쓰기


session["user"] = user

로딩


user = session["user"]
이쪽에서도 가능하다.user = session.get("user")session.get()이 아니면 None이 반환됩니다.
두 번째 인수에 값을 넣으면 초기 값을 넣을 수 있습니다.session.get('user', '名無し')app.permanent_session_lifetime = timedelta(minutes=5)이것은 얼마나 저장할지 설정합니다. 위의 코드에서는 5분간 저장한다는 이미지다. 5일로 하고 싶은 경우는 (days=5) 로 변경하면 된다.

삭제


session.pop('user', None)

영구적으로 저장하고 싶다면


session.permanent = True라고 선언한다.

주의



포인트는 2개 있어, from flask import Flask, session 로 명시적으로 session을 import 하고 있는 점과, app.secret_key 가 필요한 점. 이것이 없으면
RuntimeError: The session is unavailable because no secret key was set.  Set the secret_key on the application to something unique and secret.

그리고 오류가 발생합니다.

참고



Sessions vs Cookies
Flask Tutorial #5 - Sessions
Flask에서 세션 읽기/쓰기

좋은 웹페이지 즐겨찾기