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

Django Session会话

Wie bereits erwähnt, können wir Cookies im Client der Webanwendung verwenden, um eine große Menge nützlicher Daten zu speichern. Wir haben bereits gesehen, dass man verschiedene Daten im Client-Cookie speichern kann, was in Webanwendungen sehr nützlich ist. Dies führt zu einer großen Bedeutung der Speicherung von Daten und einigen Sicherheitslücken.

Aus Sicherheitsgründen hat Django ein Sitzungsrahmenwerk, um Cookies zu verarbeiten. Sitzungen werden verwendet, um abstrakt Cookies zu empfangen und zu senden, wobei die Daten auf dem Server (z.B. in der Datenbank) gespeichert werden, und der Client-Cookie enthält nur die Sitzungs-ID. Sitzungen helfen auch dabei, zu verhindern, dass der Benutzer den Cookie-Browser-Einstellungen 'Cookies nicht akzeptieren' gesetzt hat.

Sitzungseinstellungen

In Django wird die Sitzung in den Projekt-Einstellungen settings.py konfiguriert, indem einige Zeilen zu den Optionen MIDDLEWARE_CLASSES und INSTALLED_APPS hinzugefügt werden. Dies sollte nach dem Erstellen des Projekts erfolgen, aber es ist immer leicht zu erkennen, daher sollten MIDDLEWARE_CLASSES ähnlich wie folgt sein -

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

INSTALLED_APPS sollte enthalten -

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

Standardmäßig speichert Django Sitzungsinformationen in der Datenbank (Tabelle django_session oder Sammlung), aber man kann auch andere Arten der Speicherung verwenden, die ähnlich wie konfigurierte Engines funktionieren: in Dateien oder im Cache.

Wenn Sitzungen aktiviert sind, hat jede Anfrage (in Django bei jedem Aufruf mit dem ersten Parameter) eine Sitzungs-(Daten-)Eigenschaft.

Lassen Sie uns ein einfaches Beispiel erstellen, um zu sehen, wie man eine Sitzung erstellt und speichert. Wir haben bereits einen einfachen Login-System aufgebaut (siehe Kapitel über Formularverarbeitung in Django und Kapitel über Cookie-Verarbeitung in Django). Lassen Sie uns den Benutzernamen im Cookie speichern. Wenn Sie sich nicht ausloggen, sehen Sie beim Zugriff auf unsere Login-Seite keine Login-Formular. Es ist in Django sicherer, Cookies auf dem Server zu speichern.

Für diesen Punkt lassen Sie uns zunächst den Login-Code ändern, um den Benutzernamen auf dem Server zu speichern-

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : de.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}

dann lassen Sie uns die Ansicht erstellen, die dem Login-Formular entspricht, wenn die Cookie-Einstellungen nicht das Formular anzeigen werden -

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : de.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', {})

Lassen Sie uns nun die Datei url.py ändern und die URL ändern, um das neue Ansichtspaar −

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : de.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'))

bei dem Zugriff auf /myapp/connection, können Sie die folgende Seite sehen−

wird Sie zu der folgenden Seite weitergeleitet -

Jetzt, wenn Sie versuchen, wieder auf/myapp/connection, es wird direkt zu dem zweiten Bildschirm weitergeleitet.

Lassen Sie uns eine einfache Abmeldeansicht erstellen, um die Cookies zu löschen.

# Filename : example.py
# Copyright : 2020 By w3codebox
# Author by : de.oldtoolbag.com
# Date : 2020-08-08
def logout(request):
    try:
       del 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 : de.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,具体取决于用户的会话cookie是否已过期在用户的Web浏览器关闭时