天天看點

【python】cookie和session實作狀态保持(django中)

一、什麼是狀态保持?!

所謂的狀态保持就是,服務端存儲使用者身份資訊;

所謂的身份認證就是,服務端依據狀态保持資訊,認證出使用者身份;

二、實作狀态保持的方案

Cookie和Session的相同點:(1)、狀态保持;(2)、緩存資料
1、使用Cookie實作狀态保持
【python】cookie和session實作狀态保持(django中)
2、使用Session機制實作狀态保持
【python】cookie和session實作狀态保持(django中)

業務:需要做保持登入狀态/狀态保持功能.

保持登入狀态可以使用 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所在位置

【python】cookie和session實作狀态保持(django中)
【python】cookie和session實作狀态保持(django中)

3. session所在位置

【python】cookie和session實作狀态保持(django中)

4. session 的值也儲存到了 redis 中(以下僅為示例):

【python】cookie和session實作狀态保持(django中)
  • 由以上圖檔内容, 可知:
  • 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資料。