Web 開発では、Session と Cookie はクライアントとサーバーの間でデータを転送するために使用される 2 つの一般的なテクノロジです。 Session はユーザー データをサーバー側に保存するサーバー側のテクノロジーであり、Cookie はユーザー データをブラウザーに保存するクライアント側のテクノロジーです。
セッションとは、ユーザーデータをサーバー側に保存する技術です。 Django では、セッションは SessionMiddleware
を通じて実装され、各リクエストが処理される前にストレージからユーザーのセッション データを読み取り、それを request.session
属性に保存して、ビュー関数がアクセスできるようにします。セッションデータ。
Session を使用するには、Django プロジェクトの構成ファイルで SessionMiddleware
をアクティブにする必要があります。これにより、Django はリクエストごとに Session オブジェクトを自動的に作成します。 。 django.contrib.sessions.middleware.SessionMiddleware
を MIDDLEWARE
に追加して、SessionMiddleware
を有効にします。
MIDDLEWARE = [ # ... 'django.contrib.sessions.middleware.SessionMiddleware', # ... ]
Django のセッションには、データベース、キャッシュ、ファイル システムなど、さまざまな保存方法があります。 Django 設定ファイルでは、SESSION_ENGINE
を通じてセッションの保存方法を指定し、SESSION_COOKIE_AGE
を通じてセッションの有効期限を指定できます。
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' SESSION_CACHE_ALIAS = 'default' SESSION_COOKIE_AGE = 86400
上記の設定は、セッションがデフォルトのキャッシュを使用してキャッシュに保存され、セッションの有効期限が 1 日であることを示しています。
ビュー関数でのセッションの使用は非常に簡単で、request.session
プロパティにアクセスするだけです。以下は、Session の使用例です。
def index(request): count = request.session.get('count', 0) request.session['count'] = count + 1 return HttpResponse('count: %d' % count)
上記の例では、request.session
プロパティにアクセスし、get
メソッドを使用して、という名前のオブジェクトを取得しました。 count
セッションデータ。 count
データがセッションに存在しない場合、get
メソッドはデフォルト値 0 を返します。次に、count
を 1 ずつインクリメントし、セッションに保存します。ユーザーが再度ビュー関数にアクセスすると、以前に保存した count
データを取得し、それに 1 を加えてセッションに更新できます。
セッションに保存されるデータにはサイズ制限があることに注意してください。 Django 構成ファイルでは、SESSION_COOKIE_MAX_SIZE
を通じてセッション サイズ制限を指定できます。セッションに保存されたデータが制限を超えると、SuspiciousOperation
例外がスローされます。
Cookieは、ユーザーデータをクライアント側に保存する技術です。 Django では、HttpRequest
オブジェクトと HttpResponse
オブジェクトを使用して、Cookie の読み取りと書き込みを行うことができます。
HttpRequest
オブジェクトでは、COOKIES
属性を通じてすべての Cookie にアクセスできます。以下は Cookie を読み取る例です:
def index(request): count = request.COOKIES.get('count', 0) response = HttpResponse('count: %d' % count) response.set_cookie('count', count + 1) return response
上記の例では、request.COOKIES
プロパティにアクセスし、get
メソッドを使用して Cookie という名前の Cookie を取得しました。 count
個の Cookie。 count
データが Cookie に存在しない場合、get
メソッドはデフォルト値 0 を返します。次に、count
を 1 ずつインクリメントし、それを Cookie に保存します。最後に、HttpResponse
オブジェクトを返し、set_cookie
メソッドを使用して、更新された count
を Cookie に保存します。
Cookie に保存されるデータにもサイズ制限があることに注意してください。 Cookie のサイズ制限はブラウザによって異なる場合があります。 Django では、SESSION_COOKIE_MAX_SIZE
を通じて Cookie サイズ制限を指定できます。 Cookie に保存されたデータが制限を超えると、SuspiciousOperation
例外がスローされます。
HttpResponse
オブジェクトでは、set_cookie
メソッドを使用して Cookie を書き込むことができます。以下は Cookie への書き込みの例です:
def index(request): response = HttpResponse('Hello, world!') response.set_cookie('name', 'value', max_age=3600, expires=None, path='/', domain=None, secure=False, httponly=False, samesite=None) return response
上記の例では、HttpResponse
オブジェクトを作成し、set_cookie
メソッドを使用して # という名前の値を設定します。 # #name と値
value を持つ Cookie が応答に書き込まれます。
max_ageこのパラメータは、Cookie の最大存続期間を秒単位で指定します。
expiresパラメータは Cookie の有効期限を指定します。指定しない場合は、ブラウザを閉じると Cookie の有効期限が切れることを意味します。
path パラメータは、Cookie のアクション パスを指定します。つまり、指定されたパスにあるリクエストのみが Cookie を送信します。
domain パラメーターは Cookie のスコープを指定します。つまり、指定されたドメイン名へのアクセス要求のみが Cookie を送信します。
secureこのパラメータは、Cookie が HTTPS プロトコル経由でのみ送信できるかどうかを指定します。
httponlyこのパラメータは、Cookie に JavaScript ではなく HTTP プロトコル経由でのみアクセスできるかどうかを指定します。
samesiteこのパラメーターは、Cookie の SameSite 属性を指定します。つまり、Cookie が同じサイト内でのみ使用できるかどうかを指定します。
セッションと Cookie を使用する場合は、特定のアプリケーション シナリオに基づいて適切なテクノロジを選択する必要があります。一般に、大量のデータを保存する必要がある場合、またはデータのセキュリティを確保する必要がある場合は、セッション テクノロジーを使用する必要があり、少量のデータを保存する必要がある場合、またはクライアント間でデータを共有する必要がある場合は、Cookie テクノロジーを使用する必要があります。
さらに、Session と Cookie の両方にセキュリティ上のリスクがあることにも注意してください。セッションや Cookie が悪意のある攻撃者によって傍受されると、ユーザーのデータが漏洩します。したがって、セッションと Cookie を使用する場合は、HTTPS プロトコルを使用してデータを送信する、Cookie の HttpOnly 属性を設定するなど、特定のアプリケーション シナリオに基づいて適切なセキュリティ対策を選択する必要があります。
以上がPythonでセッションとCookieを扱う方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。