出於安全原因,Django有一個會話框架來處理Cookies。 會話用於抽象的接收和發送cookie,數據保存在伺服器端(如數據庫),而客戶端的cookie只是有識別會話ID。會話也有助於避免在用戶流覽器設置為“不接受”cookies行為。
設置會話
在Django中,使會話在專案 settings.py 完成,通過添加一些行到MIDDLEWARE_CLASSES和INSTALLED_APPS選項。這應該在創建專案完成,但它總是很容易知道,所以MIDDLEWARE_CLASSES應該類似如下 −
'django.contrib.sessions.middleware.SessionMiddleware'
'django.contrib.sessions'
默認情況下,Django在資料庫保存會話資訊(表django_session中或集合),但可以用其他的方式類似配置的引擎存儲的資訊:在檔中或在緩存中。
讓我們創建一個簡單的示例,看看如何創建和保存會話。我們之前已經建立了一個簡單的登錄系統(見Django的表單處理的章節和Django的Cookies處理一章)。讓我們保存用戶名在cookie。因此如果不註銷,訪問我們的登錄頁面時,你不會看到登錄表單。 在Django通過保存Cookie在伺服器端,使用cookies處理更加安全。
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}
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,因此配對新視圖 −
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,將能看到如下頁面−

def logout(request): try: del request.session['username'] except: pass return HttpResponse("<strong>You are logged out.</strong>")
url(r'^logout/', 'logout', name = 'logout'),

可能使用會話的一些動作
我們已經看到如何存儲和訪問會話,下麵是一個很好的瞭解請求的會話屬性還有其他一些有用的操作,如 -
-
set_expiry (value) − 設置會話的過期時間
-
get_expiry_age() − 返回直到會話過期的秒數
-
get_expiry_date() − 返回本會話將到期的日期
-
clear_expired() − 從會話中刪除過期的會話存儲
-
get_expire_at_browser_close() − 返回true或false,具體取決於用戶的會話cookie是否已過期在用戶的Web流覽器關閉時