Django官方文檔寫到:
Django 提供對(duì)匿名會(huì)話(session)的完全支持。這個(gè)會(huì)話框架讓你可以存儲(chǔ)和取回每個(gè)站點(diǎn)訪客任意數(shù)據(jù)。它在服務(wù)器端存儲(chǔ)數(shù)據(jù), 并以cookies的形式進(jìn)行發(fā)送和接受數(shù)據(jù)。
下面通過(guò)例子理解
第一步,啟動(dòng)SESSION
檢查settings.py文件兩個(gè)地方
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions', #第一個(gè)地方,默認(rèn)開(kāi)啟
'django.contrib.messages',
'django.contrib.staticfiles',
'myapp',
]
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware', #第二個(gè)地方,默認(rèn)開(kāi)啟
'corsheaders.middleware.CorsMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
第二步,配置數(shù)據(jù)庫(kù)
同樣是在settings.py文件中
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'accountApp',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1',
'PORT': 3306,
}
}
運(yùn)行遷移,python manage.py migrate
這時(shí),查看數(shù)據(jù)庫(kù)可以看到名為django_session的表。

第三步,編寫視圖函數(shù)和url配置器
# myapp/views.py
def login(request):
if request.session.get('username', None) == '123456':
return HTTPResponse('登錄成功')
else:
request.session['username'] = '123456'
return HTTPResponse('請(qǐng)登錄')
# myapp/urls.py
urlpatterns = [
path('u/login/', views.login),
]
第四步,測(cè)試
我們使用httpie工具訪問(wèn)接口

注意響應(yīng)頭中有Set-Cookie: sessionid=oe5c4tclsvq7pn071jnak7481lgqomdp; expires=Tue, 26 Nov 2019 11:42:13 GMT; Max-Age=1209600; Path=/; SameSite=Lax
再來(lái)看看數(shù)據(jù)庫(kù)中的表**django_session

可以發(fā)現(xiàn)session_key和sessionid是一樣的。
在django中,HttpRequest.session是一個(gè)字典對(duì)象,我們可以對(duì)他多次編輯,django會(huì)自動(dòng)加密并通過(guò)set-cookie響應(yīng)頭返回給瀏覽器,同時(shí)保存到django_session數(shù)據(jù)庫(kù)中。這時(shí),瀏覽器需將set-cookie的內(nèi)容保存到cookie中并在下一次請(qǐng)求發(fā)送給服務(wù)端。
使用httpie工具模擬瀏覽器再一次發(fā)送請(qǐng)求并附帶cookie
