【初心者向き】【flask】sessionの使い方。保存取得方法も解説
「flaskでsessionの機能を使いたいけど、使い方がわからない」
「sessionって何?」
というような声は、flaskでサーバーに情報を保存したいときに、聞くことが多いです。
この記事では、「sessionの使い方」と「sessionの取得、保存方法」を解説いたします。
sessionを使えるようになれば、サーバーに情報が保存できるようになるので、開発の幅が広がること間違いなしですね。
目次(クリックで読みたい部分にジャンプできます)
sessionとは?
まず、sessionとは何なのでしょうか?
通常、ユーザーの端末が、サーバーにアクセス(=リクエスト)した後、サーバーがそれにレスポンスとして応答する形になっています。
sessionとはサーバー上に保存してある情報をやり取りすることを指します。
そして、sessionはユーザーとサーバーがリクエストとレスポンスをやり取りするのと一緒に受け渡しされます。
なので、sessionはレスポンスとリクエストに対して、sessionは1つになります。
sessionが一つってことは、情報も一つだけってこと?
はい。そうです。
例えば、ショッピングサイトで「Aを購入」をクリックしたとします。
すると、sessionには「Aを購入」という情報が保存されます。
次にユーザーが、「Bを購入」をクリックしたとします。
すると、sessionは一つのみなので、一度に二つの情報を持ってこれなく、「会計をまとめてできない!」ということになります。
これはとても困りますよね。
そこで、Flaskにはセッション管理という方法があります。
Flaskのセッション管理では、session['セッション変数'] でそれぞれの情報を管理します。
以降では、セッション管理のやり方について解説していきます。
sessionにデータを保存する
sessionにデータを保存する方法を解説します。
sessionの保存には以下のコードを用います。
session['キー'] = 値
このようにして、sessionにデータを保存することができます。
これは、sessionという枠の中に、情報を辞書型のように格納していることになります。
これによって、一つしかないsessionに複数の情報を格納できるようにしているのです。
ちなみに辞書型はpythonのデータ型の中の一つです。詳しくは以下の記事で解説しているので、ピンとこなかった人は、併せて読んでおくといいと思います。
sessionからデータを取り出す
次にsessionからデータを取り出す場合です。
以下のコードでsessionからデータを取り出すことが可能です。
session.get('キー')
変数に、取得した値を格納する場合は以下のようにすればよいでしょう。
x = sesson.get('キー')
これにより、sessionからデータを取得することが可能です。
session管理での注意点
session管理を行うときに、必ず注意しておかなければならないことがあります。
それは、sessionを暗号化するためのsecret_keyを設定することです。
なぜかというと、sessionには、ユーザーのログイン情報など、他の人に漏らしてはいけない情報を格納する場合が多いです。
このような場合、sessionを盗み見ようとする悪意のあるユーザーがいる可能性があり、とても危険だからです。
secret_keyの設定は以下のようにします。
app = Flask(__name__)
#ここから↓
key = os.random(21)
app.secret_key = key
今回は、ランダムな値をセットしています。
このように、秘密鍵(secret_key)の作成を必ずしておくようにしましょう。
sessionを用いたコード例
では、sessionを実際に用いた簡単なコードを紹介します。
これから、sessionを使ってみようと思っている方は、これを参考に作ってみてはいかがでしょうか。
以下サンプルコードです。
from flask import Flask,session
import os
app = Flask(__name__)
key = os.urandom(21)
app.secret_key = key
@app.route('/session_in/<value>')
def session_in(value):
session['name'] = value
return 'session_in complete'
@app.route('/session_out/')
def session_out():
output = session.get('name')
return output
if __name__ == '__main__':
app.debug = True
app.run(host='localhost'
コードについて簡単に解説します。
from flask import Flask,session
import os
app = Flask(__name__)
key = os.urandom(21)
app.secret_key = key
ここでは、Flaskのインポートと、秘密鍵(secret_key)を設定しています。
「sessionには秘密鍵が必要」ということを反映しています。
@app.route('/session_in/<value>')
def session_in(value):
session['name'] = value
return 'session_in complete'
@app.route('/session_out/')
def session_out():
output = session.get('name')
return output
関数session_in()では、URLでアクセスがあった変数valueを、session['name']に格納しています。
関数session_out()では、sessionの内容を取得しています。
コピーしてそのまま貼り付けても、できるはずなので、良ければ試してみてください。
flaskをまだインストールしていないよって人は以下の記事を参考にしてください。
今回は、session['name']の一つのみでやっていますが、キーを変更すれば、別のsessionも保存可能です。
自分で書き換えることが上達のコツなので、ぜひ試してみてください!
まとめ
今回は、flaskにおけるsession管理を解説しました。
sessionを使えるようになると、ログイン機能などの実装もできるようになります。
以下の記事では、初心者でもできるflaskでのログイン機能の実装を紹介していますので、
併せて読んでみてください。