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 などの拡張を使う。