一、什麼是狀态保持?!
所謂的狀态保持就是,服務端存儲使用者身份資訊;
所謂的身份認證就是,服務端依據狀态保持資訊,認證出使用者身份;
二、實作狀态保持的方案
Cookie和Session的相同點:(1)、狀态保持;(2)、緩存資料
1、使用Cookie實作狀态保持
2、使用Session機制實作狀态保持
業務:需要做保持登入狀态/狀态保持功能.
保持登入狀态可以使用 cookie 或 session 來實作
但是 cookie 不安全, 是以我們使用 session 儲存.
django 中有提供 session 來狀态保持的方法: login( )
login( ) 方法實作狀态保持方式:
- 把使用者資訊儲存至 session
- 把 session 的 sessionid 存放至 cookie
- 把 cookie 放到響應中. 會随着響應傳回給前端浏覽器
login() 使用方式:
# 導入:
from django.contrib.auth import login
# 調用:
login(request, user)
三、檢視狀态保持結果
1. cookie 中有 sessionid 的值:(以下為舉例)
2. cookie所在位置
3. session所在位置
4. session 的值也儲存到了 redis 中(以下僅為示例):
- 由以上圖檔内容, 可知:
- login( ) 幫助我們把 user 的資訊寫入到 session 中去了
- 而且也幫助我們把 sessionid 儲存到了 cookie 中
- 是以我們可以在 cookie 中擷取 sessionid
- 也可以在 redis 中檢視 session 的儲存情況
四、django中配置redis
1. 安裝 django-redis 擴充包
pip install django-redis
- django-redis官方中文文檔
2. 配置redis資料庫
CACHES = {
# 預設存儲資訊: 存到 0 号庫
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/0",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
# session 資訊: 存到 1 号庫
"session": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "redis://127.0.0.1:6379/1",
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
}
},
}
SESSION_ENGINE = "django.contrib.sessions.backends.cache"
SESSION_CACHE_ALIAS = "session"
default:
- 預設的 Redis 配置項,采用 0 号 Redis 庫
session:
- 狀态保持的 Redis 配置項,采用 1 号 Redis 庫。
SESSION_ENGINE:
- 修改 session 存儲機制使用 Redis 儲存。
SESSION_CACHE_ALIAS:
- 使用名為"session"的Redis配置項存儲session資料。