English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Django セッションセッション

前述の通り、WebアプリケーションのクライアントでCookieを使用して多くの有用データを保存できます。これまでに、クライアントのcookieにさまざまなデータを保存できることを見てきました。Webアプリケーションでは非常に便利です。これにより、データを保存する重要性とセキュリティの脆弱性が生じます。

セキュリティの理由から、DjangoにはCookieを処理するためのセッションフレームワークがあります。セッションは、cookieを抽象的に受信および送信し、データはサーバーサイド(例えばデータベース)に保存され、クライアントのcookieはセッションIDを識別するだけです。セッションは、ユーザーのブラウザが「cookieを受け入れない」と設定されている場合にも役立ちます。

セッションの設定

Djangoでは、セッションをプロジェクトのsettings.pyで設定します。MIDDLEWARE_CLASSESとINSTALLED_APPSオプションにいくつかの行を追加して、これを行います。プロジェクトの作成が完了した後にこれを行うべきですが、非常に簡単にわかるので、MIDDLEWARE_CLASSESは以下のように設定されるべきです。

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
'django.contrib.sessions.middleware.SessionMiddleware'

INSTALLED_APPSには -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
'django.contrib.sessions'

デフォルトでは、Djangoはデータベースにセッション情報を保存します(django_sessionテーブルまたは集合)、ただし、他の方法で保存情報を配置できます:ファイルやキャッシュ内に保存。

セッションが有効になると、各リクエスト(Djangoのすべての第一引数に対して)にはセッション(辞書)属性があります。

簡単な例を作成して、セッションの作成と保存方法を見てみましょう。既に簡単なログインシステムを作成しています(Djangoのフォーム処理の章とDjangoのCookie処理の章を参照)。cookieにユーザー名を保存します。したがって、ログアウトしない限り、ログインページにアクセスするとログインフォームが表示されません。Djangoでは、サーバーサイドにCookieを保存することで、cookieの処理がより安全になります。

この点について、まずサーバーサイドにusernameを保存するためにログインコードを変更しましょう。-

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
def login(request):
    username = 'not logged in'
    if request.method == 'POST':
       MyLoginForm = LoginForm(request.POST)
       if MyLoginForm.is_valid():
          username = MyLoginForm.cleaned_data['username']
          request.session['username'] = username
       else:
          MyLoginForm = LoginForm()
 
    return render(request, 'loggedin.html', {'username' : username})

cookieが設定されている場合、フォームは表示されませんので、ログインフォームに対応するビューを作成しましょう。 -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
def formView(request):
    if request.session.has_key('username'):
       username = request.session['username']
       return render(request, 'loggedin.html', {'username' : username})
    else:
       return render(request, 'login.html', {})

今、url.pyファイルを編集し、URLを変更して、新しいビューを対応させます

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
from django.conf.urls import patterns, url
 from django.views.generic import TemplateView
 urlpatterns = patterns('myapp.views',
    url(r'^connection/', formView, name = 'loginform'),
    url(r'^login/', 'login', name = 'login'))

アクセスすると /myapp/connection,以下のページが表示されます−

以下のページにリダイレクトされます -

今、再びアクセスを試みると/myapp/connection,それが直接次のスクリーンにリダイレクトします。

Cookieをクリアするための簡単なログアウトビューを作成しましょう。

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
def logout(request):
    try:
       request.session['username']を削除します。
    except:
       pass
    return HttpResponse("<strong>You are logged out.</strong>")

myapp/url.py で URL 注退をマッピング

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : ja.oldtoolbag.com
# Date : 2020-08-08
url(r'^logout/', 'logout', name = 'logout'),

今、/myapp/logout、以下のページが表示されます-

再度アクセスすると、 /myapp/connection 、ログインフォーム(スクリーン)1)。

セッションを使用する可能性のあるアクション

セッションの保存とアクセスの方法を見た後、以下は、リクエストのセッション属性と他の役立つ操作(例えば:)を理解するのに役立ちます:

  • set_expiry(value) − セッションの終了時間を設定します

  • get_expiry_age() − セッションが終了するまでの秒数を返します

  • get_expiry_date() − 本セッションが終了するまでの日付を返します

  • clear_expired() − セッションから無効化されたセッションストレージを削除します

  • get_expire_at_browser_close()   − 返回 true または false、ユーザーのセッションクッキーがブラウザの閉じられる時に無効化されるかどうかによります