1. 程式人生 > >Django專案中的session儲存

Django專案中的session儲存

Session


1 啟用Session

Django專案預設啟用Session。

可以在settings.py檔案中檢視,如圖所示
session_middleware

如需禁用session,將上圖中的session中介軟體註釋掉即可。

2 儲存方式

在settings.py檔案中,可以設定session資料的儲存方式,可以儲存在資料庫、本地快取等。

2.1 資料庫

儲存在資料庫中,如下設定可以寫,也可以不寫,這是預設儲存方式。

SESSION_ENGINE='django.contrib.sessions.backends.db'

如果儲存在資料庫中,需要在項INSTALLED_APPS中安裝Session應用。
session_app

資料庫中的表如圖所示

session_database

表結構如下
session_table
由表結構可知,操作Session包括三個資料:鍵,值,過期時間。

2.2 本地快取

儲存在本機記憶體中,如果丟失則不能找回,比資料庫的方式讀寫更快。

SESSION_ENGINE='django.contrib.sessions.backends.cache'
2.3 混合儲存

優先從本機記憶體中存取,如果沒有則從資料庫中存取。

SESSION_ENGINE='django.contrib.sessions.backends.cached_db'
2.4 Redis

在redis中儲存session,需要引入第三方擴充套件,我們可以使用django-redis來解決。

1) 安裝擴充套件

pip install django-redis

2)配置

在settings.py檔案中做如下設定

CACHES = {
    "default": {
        "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 = "default"

注意
如果redis的ip地址不是本地(專案上線)迴環127.0.0.1,而是其他地址,訪問Django時,可能出現Redis連線錯誤,如下:
redis_connect_error

解決方法:

修改redis的配置檔案,新增特定ip地址。

開啟redis的配置檔案

sudo vim /etc/redis/redis.conf

在如下配置項進行修改(如要新增10.211.55.5地址)
modify_redis_config

3 Session操作

通過HttpRequest物件的session屬性進行會話的讀寫操作。

1) 以鍵值對的格式寫session。

request.session['鍵']=

2)根據鍵讀取值。

request.session.get('鍵',預設值)

3)清除所有session,在儲存中刪除值部分。

request.session.clear()

4)清除session資料,在儲存中刪除session的整條資料。

request.session.flush()

5)刪除session中的指定鍵及值,在儲存中只刪除某個鍵及對應的值。

del request.session['鍵']

6)設定session的有效期

request.session.set_expiry(value)
  • 如果value是一個整數,session將在value秒沒有活動後過期。
  • 如果value為0,那麼使用者session的Cookie將在使用者的瀏覽器關閉時過期。
  • 如果value為None,那麼session有效期將採用系統預設值,預設為兩週,可以通過在settings.py中設定SESSION_COOKIE_AGE來設定全域性預設值。