最新の Web アプリケーションでは、パーソナライズされたエクスペリエンスを作成するために、複数のリクエストにわたってユーザーの状態を維持することが不可欠です。 Django は、組み込みのセッション フレームワークでこれを簡素化し、開発者がユーザー データを安全かつ効率的に管理できるようにします。
Django の組み込みセッションは、複数のリクエストにわたるユーザー データの管理を担当します。ユーザーが Django アプリにログインすると、サーバーはセッション ID を作成し、通常はクライアントのブラウザーの Cookie に保存されます。このセッション ID は、サーバーに保存されているデータを取得し、リクエストを特定のユーザーにリンクするためのキーとして機能します。そのため、認証ステータスは異なるページ間でも保持されます。
Django のセッション ミドルウェアはセッション管理を自動化します。受信リクエストを処理してセッション データを取得し、セッション Cookie を更新または設定するための送信応答を準備します。セッションミドルウェアが有効になっているかどうかを確認するには、settings.py ファイルの MIDDLEWARE セクションを調べます:
# settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', # Other middleware ]
セッション データを保存するためのオプションがいくつかあります。構築したいアプリケーションに応じて、それぞれに長所と短所があります。
アナロジー: 劇場に、すべてのコートが保管されるロッカー付きの安全な保管室があると想像してください。各ロッカーには、チケットに記載されている番号と一致する固有の番号が割り当てられます。チケットを持って戻ってくると、係員がログブックでロッカー番号を調べ、コートを回収します。
データベースベースのセッションでは、セッション データがデータベース サーバーに保存されます。そのため、ユーザー設定、ログインステータス、カートの詳細などの機密情報はバックエンドに安全に保存されたままになります。このタイプのセッションは安全かもしれませんが、書き込みと読み取りのプロセスが関与する場合には多少の不便が生じます。データベースにバックアップされたセッションはキャッシュにバックアップされたセッションに比べて遅いため、トラフィックが多い場所でアプリケーションを構築している場合は、もう一度考えてみる必要があります。データベースにセッションを保存すると、データベースの負荷が増加し、適切に管理しないと全体的なパフォーマンスに影響を与える可能性があります。
データベースを使用したセッションを使用したい場合は、INSTALLED_APPS 設定に django.contrib.sessions を追加する必要があります。必ず manage.py merge を実行して、セッション データを保存する単一のデータベース テーブルをインストールしてください。
アナロジー: この場合、各コートは劇場の後ろの大きな部屋にある、ラベルが貼られた異なるロッカーに保管されます。各ロッカーには、コートの詳細が記載された固有のタグまたはファイルが付いており、チケットを提示すると、係員がロッカールームに行き、対応するタグを見つけてコートを取り出します。
ファイルベースのセッションは、サーバーのファイルシステムを使用してセッション データを保存します。これは、各ユーザー セッションがサーバー上の個別のファイルに保存されることを意味します。デフォルトでは、Django はセッション ファイルを /tmp (Unix ベースのシステムの場合) の下の django_session ディレクトリ、または Django の設定で指定されたディレクトリに保存します。
ファイルベースのセッションを有効にするには、settings.py ファイルで SESSION_ENGINE を django.contrib.sessions.backends.file に設定します。
# settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', # Other middleware ]
アナロジー: ここの劇場では、入り口近くに一時的なコートラックが使用されており、コートはすぐに保管されます。これにより、コートをすばやく取り出すことができますが、ラックがいっぱいになると、最も古いコートが二次保管場所に移動されるか、完全に削除される可能性があります。
このタイプのセッション ストレージは、キャッシュ システム (Memcached や Redis など) がセッション データを保存する場所です。セッションをメモリ内キャッシュに保存すると、書き込みまたは読み取りプロセスが非常に高速であるため、トラフィックが多いアプリケーションや素早い応答時間を必要とするアプリケーションに役立ちます。
キャッシュバックされたセッションを使用するには、settings.py ファイルで SESSION_ENGINE 設定を構成します。使用するキャッシュ メモリに応じてキャッシュを構成する必要もあります。
# settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.file' # Use file-based session storage SESSION_FILE_PATH = '/path/to/session/files/' # Specify a directory for session files (optional)
あるいは、セッション データをキャッシュとデータベースの両方に保存し、キャッシュが使用できない場合はデータベースにフォールバックする django.contrib.sessions.backends.cached_db を使用することもできます。
このタイプのセッションを使用する最大の利点は、スケーラビリティと速度です。キャッシュバックされたセッションは、データをメモリに保存するため高速であるだけでなく、データベース セッションの負荷も軽減されます。データはサーバー間で共有できるため、マルチサーバーのセットアップが可能です。
類似: ここで、劇場ではコートを保管する代わりに、持ち歩くことを許可していますが、それがあなたのコートであることを証明する特別なスタンプをチケットに押す必要があります。コート(セッションデータ)を持参し、劇場入場のたびに係員がチケットのスタンプをチェックし、改ざんされていないことを確認します。
Django の署名付き Cookie セッションは、セッション データをサーバー側 (データベースまたはキャッシュ) に保存するのではなく、署名され暗号化された Cookie 内のクライアントのブラウザーに直接保存します。
署名付き Cookie セッションを有効にするには、署名付き Cookie バックエンドを使用するように Django の settings.py ファイルで SESSION_ENGINE を設定します。
# settings.py MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', # Other middleware ]
署名付き Cookie セッションにより、サーバーの負荷が軽減され、サーバー リソースが解放されます。ただし、Cookie にはサイズ制限 (約 4 KB) があるため、署名付き Cookie セッションは大量のセッション データを保存するのには適していません。 Cookie データがリクエストごとに送信されるため、Cookie サイズが大きいとリクエストが遅くなる可能性があります。
Django では、セッションの動作を構成するためのいくつかの設定が提供されています。
SESSION_COOKIE_AGE: セッションの有効期限を秒単位で設定します。
SESSION_COOKIE_SECURE: セッションは HTTPS 経由で送信される必要があります。
SESSION_EXPIRE_AT_BROWSER_CLOSE: ブラウザが閉じるとセッションを終了します。
SESSION_COOKIE_HTTPONLY: セッション Cookie への JavaScript アクセスを制限し、セキュリティを強化します。
これらの設定は、セッションの動作を特定のアプリケーションのニーズに合わせて調整するのに役立ちます。セッション構成の詳細については、Django のドキュメントを参照してください。
Django ビューでセッションを操作するには、辞書のように動作する request.session オブジェクトを使用します。基本的な操作をいくつか示します:
データの保存:
# settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.file' # Use file-based session storage SESSION_FILE_PATH = '/path/to/session/files/' # Specify a directory for session files (optional)
データの取得:
# settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # For caching session storage SESSION_CACHE_ALIAS = 'default' # Specify the cache alias if needed (e.g., 'redis' or 'memcached') # Cache configuration (example with Redis) CACHES = { 'default': { 'BACKEND': 'django_redis.cache.RedisCache', 'LOCATION': 'redis://127.0.0.1:6379/1', # Redis URL 'OPTIONS': { 'CLIENT_CLASS': 'django_redis.client.DefaultClient', } } }
データの削除:
# settings.py SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' SECRET_KEY = 'your-secret-key' # Make sure this key is kept secure and unique for your app
セッションの一般的な用途は、ユーザーのログイン ステータスを追跡することです。セッションを使用してシンプルなログイン システムを実装する方法は次のとおりです:
request.session['username'] = 'Harry Potter'
Django ビューにはセッション用のメソッドがまだたくさんあります。完全なリストについては、Django のドキュメントを確認してください。
Django は期限切れのセッションを定期的に削除します。セッションのクリーンアップ プロセスを構成するか、django-admin clearsessions などの管理コマンドを実行することで、頻度をカスタマイズできます。
サーバーの負荷が増加し、応答時間が遅くなる可能性があるため、セッションに大量のデータを保存しないでください。最後に、セキュア Cookie、HttpOnly、HTTPS 設定を有効にして、セッション データを保護します。
Django のセッション フレームワークは強力かつ柔軟で安全なので、Web アプリケーションにセッション管理を簡単に実装できます。適切な構成と安全な実践により、Django セッションを活用して、堅牢なセキュリティを維持しながら、効率的でパーソナライズされたユーザー エクスペリエンスを作成できます。
以上がDjango での認証と認可: Django セッションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。