Flask の Cookie とセッション管理
Flask では Cookie とセッションを使ってクライアントの状態を保持できる。Cookie はブラウザに保存される小さなデータで、セッションはサーバー側でユーザーを識別するための仕組みである。
Cookie の設定と取得
Cookie は response.set_cookie() で設定し、request.cookies で取得する。
from flask import Flask, request, make_response
app = Flask(__name__)
@app.route('/set-cookie')
def set_cookie():
resp = make_response('Cookie has been set')
resp.set_cookie('username', 'Alice', max_age=3600)
return resp
@app.route('/get-cookie')
def get_cookie():
username = request.cookies.get('username', 'Guest')
return f'Hello, {username}!'max_age は Cookie の有効期限を秒単位で指定する。省略するとブラウザを閉じたときに削除される。
Cookie の削除
Cookie を削除するには、有効期限を過去に設定する。
@app.route('/delete-cookie')
def delete_cookie():
resp = make_response('Cookie deleted')
resp.delete_cookie('username')
return respセッションの利用
セッションは署名付き Cookie としてクライアントに保存される。session オブジェクトを辞書のように操作できる。
from flask import Flask, session
app = Flask(__name__)
app.secret_key = 'your-secret-key'
@app.route('/login')
def login():
session['user_id'] = 42
return 'Logged in'
@app.route('/profile')
def profile():
user_id = session.get('user_id')
if user_id:
return f'User ID: {user_id}'
return 'Not logged in', 401
@app.route('/logout')
def logout():
session.pop('user_id', None)
return 'Logged out'secret_key は署名に使われるため、本番環境では十分に複雑な値を設定し、外部に漏らさないこと。
セッションの注意点
Flask のデフォルトセッションはクライアント側に保存されるため、以下の点に注意が必要である。
| データサイズ | Cookie のサイズ制限(約4KB)を超えられない |
| 機密情報 | 暗号化されないため、パスワードなどは保存しない |
| 改ざん検知 | 署名により改ざんは検知できるが、内容は読める |
サーバーサイドセッションが必要な場合は Flask-Session などの拡張を使う。



