【Django】セッションSessionとは:使用方法(保存や読み込み)と各種設定について

時計 2022.03.18 / 時計

【Django】セッションSessionとは:使用方法(保存や読み込み)と各種設定について

本記事ではDjangoにおける、セッションSession使用方法や各種設定について解説していきます。

Webアプリケーションでセッションはログイン機能など重要な役割を担っています。セッションが使えなければ有用なWebアプリケーションとは言えないでしょう。

本記事を通してDjangoでのセッションの使用方法や事前設定などを覚えてください。

セッションSessionとは

セッションとは一連の通信開始から終了までの処理を意味します。Webアプリケーションではユーザーのログイン情報や状態の保持に利用されます。

DjangoでSessionを利用することで、任意のデータをユーザー毎に保存し、それらを用いてユーザー独自のページ表示を実現できるようになります。

ユーザー毎の大切なデータはサーバー側で保存し、ユーザーが送信するクッキー内のセッションIDによってユーザーの特定を行います。

ユーザーから送られるクッキーにはデータ本体は含まれないため、セキュリティ面でも安心できます。

セッションについてより詳しい説明は以下記事をご参照ください。

Django:Sessionの利用準備

Sessionの有効化

Djangoはフルスタックフレームワークと言われるほど標準で豊富な機能を備えています。セッション機能に関しても、最初から使えるようになっています。

settings.pyのINSTALLED_APPSとMIDDLEWAREに以下セッション機能が追加されているか確認しておきましょう。

INSTALLED_APPS = [
    …
    'django.contrib.sessions',
]
MIDDLEWARE = [
    …
    'django.contrib.sessions.middleware.SessionMiddleware',
]

上記sessionの設定はデフォルトで記入されており、これらによりセッション管理機能が使えるようになります。

ここで設定を確認したsettings.pyはWebアプリケーションを開発する上でとても重要なファイルであり、プロジェクトの各種設定を記述するファイルです。

settings.pyについて詳しくは以下記事をご参照ください。

Sessionエンジン設定

セッションデータの保存先は以下の中から選ぶことができます。

  • データベース
  • ファイル
  • キャッシュ
  • クッキー

ユーザー毎のSession(データ)はデフォルト設定ではdjango.contrib.sessions.models内のSessionモデルを介してデータベースに保存されます。
Sessionが保存されるデータベースのテーブル名はdjango_sessionです。

データベースにセッションを保存する仕組みはINSTALLED_APPSに記入してあるdjango.contrib.sessionsによるものです。

またDjangoでは簡単にSessionをファイルやキャッシュに保存するように変更することができます。

セッションデータの保存先を変更するにはSessionエンジン(セッションエンジン)を変更します。

Sessionの保存先をキャッシュに変更

Sessionの保存先をキャッシュにすることで、サーバーのパフォーマンスが良くなり処理が高速になることが望めます。

保存先をキャッシュに変更するにはsettings.pyに以下を追加します。

SESSION_ENGINE = ‘django.contrib.sessions.backends.cache'

Sessionの保存先をファイルに変更

Sessionの保存先をファイルに変更するにはsettings.pyに以下を追加します。

SESSION_ENGINE = 'django.contrib.sessions.backends.file'

セッションファイルはデフォルトではtempfile.gettempdir()で指定される/tmpに保存されます。

セッションファイルを保存する場所を指定したい場合は、settings.pyにSESSION_FILE_PATHで指定してください。

Django:views.pyでのセッション利用

セッションへのデータ保存

セッションデータはHttpRequestオブジェクト(関数で最初に受け取る引数request)のsession属性(request.session)に格納されています。

HttpRequestオブジェクトとはDjangoサーバーがユーザークライアント(ブラウザ)からリクエストを受け取った際に生成されるオブジェクトです。基本的に引数requestでHttpRequestオブジェクトを受け取ります。

HttpRequestオブジェクトについて詳しくは以下記事をご参照ください。

セッションにデータ(文字列・値)を入れる場合は次のようにセッション名とデータを指定します。

構文

request.session['セッション名'] = データ

例えばセッション名officeのセッションにデータがなければ、文字列'django'を保存するには以下のように記述します。

if not 'office' in request.session:
    request.session['office'] = 'django'

セッションからデータ読み込み

セッションからデータを読み込む場合は、request.sessionに読み込みたいセッション名を指定します。

例えばセッション名officeに保存されているデータを読み込み、変数に代入するには次のように記述します。

session_data = request.session['office']

またはget()メソッドを使ってデータを取得することもできます。

session_data = request.session.get('office']

セッションの削除とクリア

指定したセッション名のセッションを削除するにはdelを使用します。

del request.session['セッション名']

またはpop()メソッドでもセッションの削除ができます。

request.session('セッション名')

すべてのセッションをクリアするにはclear()メソッドを使用します。

request.session.clear()

セッションの有無を判定

特定のセッション名のセッションが存在するか判定するには以下のように記述します。

if 'office' in request.session:
    print('セッション名officeは存在します')
else:
    print('セッション名officeは存在しません')

上記のようにrequest.sessionの中に指定したセッション名が存在するかをif文で判定します。

Django:セッションデータの保存期間

セッションデータはデフォルトで2週間保存するようになっています。

保存期間を変更したい場合はsettings.pyにSESSION_COOKIE_AGEを追記して変更することができます。

まとめ

本記事「【Django】セッションSessionとは:使用方法(保存や読み込み)と各種設定について」はいかがでしたか。

これで基本的なセッションをDjangoで利用できるようになりました。

ぜひご自身のWebアプリケーションにセッション機能を組み込んで利用してみてください。