Django中session的使用

<!DOCTYPE html>


session使用詳述




css

啓用session


首先確認在 MIDDLEWARE_CLASSES中確保它包含'django.contrib.sessions.middleware.SessionMiddleware',若是不想使用用session會話能夠刪除這一項
html


配置session引擎


默認狀況下,django框架會將session數據存儲在數據庫(django框架中默認建立的model裏有存儲session的model,這也是爲何在使用前需執行建立數據庫操做的緣由,使用django.contrib.sessions.models.Session模型)中。從數據庫相比其餘存儲session的方式慢一點,因此能夠配置django來存儲session到文件系統或者緩存中。
git


使用數據庫支持的session


若是你想用數據庫存儲session,須要添加'django.contrib.sessions' 到你的INSTALLED_APPS設置中。而且建立存儲session數據的表。
github


使用基於緩存的session


使用緩存存儲session,在性能上會比使用數據庫更快。

使用緩存來存儲session必須先進行配置緩存

缺點:本地內存使用緩存不能長時間保留數據,因此不是好的選擇,並且直接使用文件或者數據庫比文件或數據庫緩存速度快。本地緩存系統不是多進程安全的。

使用CACHES中能夠定義多個緩存,Django使用默認緩存,若要用其餘緩存,能夠設置SESSIONCACHEALIAS爲該緩存的名字

配置好緩存以後,有兩種緩存可供選擇
web

  1. 對於簡單的緩存session,能夠設置SESSIONENGINE爲'django.contrib.sessions.backends.cache',這正方式就是將數據緩存在內存中,不作持久化存儲,若是緩存填滿或者緩存服務器重啓,緩存數據就可能會被清理掉
  2. 持久化數據緩存就要使用數據庫,設置SESSIONENGINE爲'django.contrib.sessions.backends.cacheddb',在寫數據的時候使用緩存,讀取時先讀緩存中的數據,若是緩存中數據被清理了,就從數據庫中讀取

    兩種緩存方式都很快,簡單的更快一點,由於沒有作數據持久化

    特殊說明:在1.7 版以前,cacheddb 永遠使用default緩存而不是SESSIONCACHEALIAS。

    使用緩存例子:
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'

    SESSIONCACHEALIAS = 'default'#表示使用緩存的別名,在CACHES中尋找,下面有default和db1兩種選擇

    CACHES = {
    'default': {
    'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
    'LOCATION': [
    '172.19.26.240:11211',
    '172.19.26.242:11211',
    ]
    },
    'db1': {
    'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
    'LOCATION': [
    '172.19.26.240:11211',
    '172.19.26.242:11211',
    ]
    }
    }數據庫


    附加內容


    CACHES的格式,默認:
    {
    'default':{
    'BACKEND':'django.core.cache.backends.locmen.LocMemCache',
    }
    }

    一個字典包含全部緩存要使用的設置它是一個嵌套字典,其內容將高速緩存別名映射到包含單個高速緩存的選項的字典中。django


    CACHES設置必須配置‘default’緩存;還能夠指定任何數量的附加高速緩存。若是您正在使用本地內存高速緩存以外的其餘高速緩存後端,或者須要定義多個高速緩存,這就須要添加其餘高速緩存項。如下高速緩存選項可用。
    BACKEND
    默認值:''(空字符串)
    要使用的緩存後端。內置高速緩存後端是:
    'django.core.cache.backends.db.DatabaseCache'
    'django.core.cache.backends.dummy.DummyCache'
    'django.core.cache.backends.filebased.FileBasedCache'
    'django.core.cache.backends.locmem.LocMemCache'
    'django.core.cache.backends.memcached.MemcachedCache'
    'django.core.cache.backends.memcached.PyLibMCCache'
    經過將BACKEND設置爲緩存後端類的徹底限定路徑(即mypackage.backends.whatever.WhateverCache),您可使用未隨Django提供的緩存後端。 )。canvas


    基於文件的session


    使用基於文件的session,使用SESSIONENGINE爲'django.contrib.sessions.backends.file',使用SESSIONFILE_PATH設置文件的位置,若是不設會使用默認存儲位置爲,它的默認值來自tempfile.gettempdir()的輸出,大部分狀況是/tmp
    後端


    使用基於Cookie的session


    要使用基於Cookie 的會話,請設置SESSIONENGINE 爲"django.contrib.sessions.backends.signedcookies"。此時,會話數據的存儲將使用Django 的加密簽名 工具和SECRET_KEY 設置。

    建議保留SESSIONCOOKIEHTTPONLY 設置爲True 以防止從JavaScript 中訪問存儲的數據。瀏覽器


    session的使用


    # 獲取、設置、刪除Session中數據

    request.session['k1']

    request.session.get('k1',None)

    request.session['k1'] = 123

    request.session.setdefault('k1',123) # 存在則不設置

    del request.session['k1']#刪除某個鍵值對



    # 全部 鍵、值、鍵值對

    request.session.keys()

    request.session.values()

    request.session.items()

    request.session.iterkeys()

    request.session.itervalues()

    request.session.iteritems()

    # 用戶session的隨機字符串

    request.session.session_key

    # 將全部Session失效日期小於當前日期的數據刪除

    request.session.clear_expired()

    # 檢查 用戶session的隨機字符串 在數據庫中是否

    request.session.exists("session_key")

    # 刪除當前用戶的全部Session數據 request.session.delete("session_key") # 註銷使用 request.session.clear() #設置超時時間,set_expiry(value)方法是在最後一次刷新開始計算 request.session.set_expiry(value) * 若是value是個整數,session會在些秒數後失效。 * 若是value是個datatime或timedelta,session就會在這個時間後失效。 * 若是value是0,用戶關閉瀏覽器session就會失效。 * 若是value是None,session會依賴全局session失效策略。
相關文章
相關標籤/搜索