はじめに
PythonのWEBフレームワークであるFlaskのセッション管理について解説します。
今回はセッションについて見てみよう!
セッションでページから他のページに情報の受け渡しが出来るようになるにゃ。
Flask学習におすすめの本を紹介します。
⇨【Python】Flask入門におすすめの本 3選
セッションの役割
セッションは、クライアントごとに必要な情報を保持するのに用いられます。
例えば何かのサイトでログインすると、ページ遷移したりページの再読み込みをしても、ログイン中である状況は変わりません。
これはセッションがログインしている情報を持っているためです。このようなログイン情報をはじめ、セッションはページから他のページに情報を受け渡す事ができます。
セッションのサンプル
ファイルの準備
それでは、Flaskにおいてのセッションの記述方法を見ていきましょう。
まずは下記のような階層でファイルを準備します。
. ├── app.py └── templates ├── index.html └── login.html
プログラムの内容
サンプルプログラムを作成していきましょう。
app.pyとして下記のプログラムを作成します。ちょっと長いですが内容を確認していきましょう。
from flask import Flask, redirect, url_for, render_template, request, session
from datetime import timedelta
app = Flask(__name__)
app.secret_key = 'abcdefghijklmn'
app.permanent_session_lifetime = timedelta(minutes=3)
@app.route("/", methods = ["POST", "GET"])
def login():
if request.method == "POST":
session.permanent = True
user = request.form.get("id")
session["id"] = user
return redirect(url_for("login_"))
else:
if "id" in session:
return redirect(url_for("login_"))
return render_template("index.html")
@app.route("/login", methods=["GET","POST"])
def login_():
if "id" in session:
return render_template("login.html", id=session["id"])
return render_template("index.html")
@app.route("/logout", methods=["GET"])
def logout():
session.pop('id',None)
session.clear()
return redirect("/")
if __name__ == '__main__':
app.debug = True
app.run(host='localhost')
app.secret_key = 'abcdefghijklmn'
セッションに格納する情報を暗号化するために必要なもので、必ず記述しておく必要があります。
app.permanent_session_lifetime = timedelta(minutes=3)
セキュリティの観点から、一定時間セッションにアクセスがなければ、セッションに格納されている情報は自動的に破棄されるようにします。
今回は3分操作がなければ破棄されるようにしています。
sessionは辞書型のように扱います。
session["id"] = user
sessionに情報を格納する
id=session["id"]
sessionから情報を取得する
if "id" in session
このif文でsessionにidというキーで情報があるかどうか判断できます。
なお、セッションの有効時間が過ぎた場合もFalseを返します。
次にindex.htmlを記述します。
<!DOCTYPE html>
<html lang="jp">
<head>
<meta charset="UTF-8">
<title>test_flask</title>
</head>
<body >
<form method="post" action='/'>
<input type="text" name="id">
<button type="submit" value="Login">Login</button>
</form>
</body>
</html>
最後にlogin.htmlを記述します。
<!DOCTYPE html>
<html lang="jp">
<head>
<meta charset="UTF-8">
<title>ログインページ</title>
</head>
<body>
<p>{{id}}でログイン中</p>
<a href="/logout">Logout</a>
</body>
</html>
実行結果
実行結果を見てみるにゃ
Google Chromeのブラウザで開発者ツールを開いて、セッション情報の存在を確認してみます。
開発者ツールは、ブラウザ上で右クリックして表示されるメニューから検証を選択すると表示されます。
ツール上のApplicationタブを開き、左メニューのCookiesを開くとセッション情報が見えます。
名前を入力してログインしてみます。
ログインすると、sessionが出来上がります。
仮に、ログイン状態(sessionが存在する状態)でブラウザを閉じて、再度localhost:5000を開いても、
ログイン中のページが表示されます。
これは、sessionが有効な状態でブラウザに保持されているためです。
試しに他のブラウザでページを開くと、ログインされていない状態で開かれます。
他のブラウザではsessionが作成、保持されていないためです。
ログアウトするとsessionが消えました。
まとめ
セッションについて解説しました。
セッションを利用することで、サービスに利用するユーザーの固有な情報を保持できます。
ログインを行うようなサイトは、セッションを利用してユーザーの情報を管理しているんだね。
Flask学習におすすめの本を紹介します。
⇨【Python】Flask入門におすすめの本 3選
前回はGET・POSTのForm送信について解説しました。
Flask入門まとめページ