目次
概要
flaskフレームワークのセッション管理方法について簡単にまとめた。
クライアントから送られたデータをセッションに保持する方法、削除する方法について扱う。
セッションとは
セッションとは、クライアント側のクッキーを利用してログイン情報を保持する仕組み。
クッキーについては以下を参考。
MDN Web Docs
Cookie(ウェブ Cookie、ブラウザー Cookie とも呼ぶ)は、サーバーがユーザーのウェブブラウザーに送信す…
HTTP Cookie (ウェブ Cookie、ブラウザー Cookie) は、サーバーがユーザーのウェブブラウザーに送信する小さなデータであり、ブラウザーに保存され、その後のリクエストと共に同じサーバーへ返送されます。一般的には、 2 つのリクエストが同じブラウザーから送信されたものであるかを知るために使用されます。例えば、ユーザーのログイン状態を維持することができます。 Cookie は、ステートレスな HTTP プロトコルのためにステートフルな情報を記憶します。
全体像
セッション管理についての資材の全体像は以下のとおり。
ファイル構成
各ファイル内容
app01.py
from flask import Flask, render_template, request, redirect, url_for, session
app = Flask(__name__)
app.secret_key = "VWBaYiaBqeXx0UMbDGtv"
@app.route("/")
def index():
""" 初期画面表示 """
return render_template("index.html")
@app.route("/login", methods=["POST"])
def login():
""" ログイン処理 """
# 入力値の取得
name = request.form.get("name", "")
if name:
# セッション登録
session["name"] = name
return redirect(url_for("output"))
else:
return redirect(url_for("index"))
@app.route("/output")
def output():
""" 結果画面表示 """
return render_template("output.html")
@app.route("/logout")
def logout():
""" ログアウト """
# セッション情報の削除
session.clear()
return redirect(url_for("index"))
if __name__ == '__main__':
# 8080ポートで起動
app.run(port=8080, debug=True)
index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>セッション確認</title>
</head>
<body>
<h2>ログインしてください。</h2>
<form method="post" action="{{ url_for('login')}}">
<p>名前:<input type="text" name="name" size="40"></p>
<button type="submit">ログイン</button>
</form>
</body>
</html>
output.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>セッション確認</title>
</head>
<body>
<h1>セッション情報:「{{ session["name"] }}」</h1>
<p><a href="{{ url_for('logout') }}">ログアウト</a></p>
</body>
</html>
セッションの利用方法
資材のインポート
sessionオブジェクトをインポートする。
from flask import Flask, render_template, request, redirect, url_for, session
秘密鍵(文字列)
クッキーの内容を改ざんできないよう、秘密鍵情報を定義する必要がある。
任意の秘密鍵文字列を設定する。
app.secret_key = "VWBaYiaBqeXx0UMbDGtv"
セッションに保持
セッションオブジェクトに保持したい値を辞書データとして保存できる。
app01.py
@app.route("/login", methods=["POST"])
def login():
""" ログイン処理 """
# 入力値の取得
name = request.form.get("name", "")
if name:
# セッション登録
session["name"] = name
return redirect(url_for("output"))
else:
return redirect(url_for("index"))return redirect(url_for("index"))
セッション情報の削除
ログアウト処理などでセッション情報を削除したいときは以下のように行う。
app01.py
@app.route("/logout")
def logout():
""" ログアウト """
# セッション情報の削除
session.clear()
return redirect(url_for("index"))
また、辞書型として扱えるため個別削除も可能。
以下のようにキー値を指定することで、個別にセッションに格納した値を削除できる。
del session["name"]