English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
前述の通り、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、ユーザーのセッションクッキーがブラウザの閉じられる時に無効化されるかどうかによります