溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Django怎么操作session

發(fā)布時(shí)間:2021-07-02 10:29:15 來(lái)源:億速云 閱讀:149 作者:小新 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要為大家展示了“Django怎么操作session”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“Django怎么操作session”這篇文章吧。

session是存放在服務(wù)端的,在django中使用session必須要先在數(shù)據(jù)庫(kù)中創(chuàng)建django_session表,session相關(guān)信息都要依賴此表

獲取session

request.session['status']

request.session.get('status')#一般用get,無(wú)此鍵返回None不報(bào)錯(cuò)

設(shè)置session

#在使用session之前必須在數(shù)據(jù)庫(kù)創(chuàng)建相關(guān)的表(django_session)

#調(diào)用request.session首先會(huì)接收請(qǐng)求頭部的cookie是否有sessionid,進(jìn)行表查詢對(duì)比

#如果有重新生成一個(gè)sessionid進(jìn)行覆蓋更新記錄,并將隨機(jī)生成的sessionid添加到cookie返回前端

# 沒(méi)有則新建存進(jìn)表中的session_key,同時(shí)將字典信息加密自動(dòng)存進(jìn)表中的session_data字段

request.session['status']=True  # 存在自動(dòng)覆蓋

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

刪除session

request.session.flush()#刪除服務(wù)端的session,刪除當(dāng)前的會(huì)話數(shù)據(jù)并刪除會(huì)話的Cookie。

request.session.clear_expired()# 將所有Session失效日期小于當(dāng)前日期的數(shù)據(jù)刪除,將過(guò)期的刪除

del request.session['k1']#django-session表里面同步刪除

request.session.delete()# 刪除當(dāng)前會(huì)話的所有Session數(shù)據(jù)

更多session操作

# 所有 鍵、值、鍵值對(duì)

request.session.keys()

request.session.values()

request.session.items()

#獲取sessionid的值

session_key = request.session.session_key 

#檢查會(huì)話session的key在數(shù)據(jù)庫(kù)中是否存在

request.session.exists("session_key") #session_key就是那個(gè)sessionid的值

# 設(shè)置會(huì)話Session和Cookie的超時(shí)時(shí)間

request.session.set_expiry(value)

    * 如果value是個(gè)整數(shù),session會(huì)在些秒數(shù)后失效。

    * 如果value是個(gè)datatime或timedelta,session就會(huì)在這個(gè)時(shí)間后失效。

    * 如果value是0,用戶關(guān)閉瀏覽器session就會(huì)失效。

    * 如果value是None,session會(huì)依賴全局session失效策略。

Session詳細(xì)流程解析

Django怎么操作session

Django中的Session配置

Django中默認(rèn)支持Session,其內(nèi)部提供了5種類型的Session供開(kāi)發(fā)者使用。

1. 數(shù)據(jù)庫(kù)Session

SESSION_ENGINE = 'django.contrib.sessions.backends.db'  # 引擎(默認(rèn))

2. 緩存Session

SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎

SESSION_CACHE_ALIAS = 'default'              # 使用的緩存別名(默認(rèn)內(nèi)存緩存,也可以是memcache),此處別名依賴緩存的設(shè)置

3. 文件Session

SESSION_ENGINE = 'django.contrib.sessions.backends.file'  # 引擎
SESSION_FILE_PATH = None                  # 緩存文件路徑,如果為None,則使用tempfile模塊獲取一個(gè)臨時(shí)地址tempfile.gettempdir()

4. 緩存+數(shù)據(jù)庫(kù)

SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'    # 引擎

5. 加密Cookie Session

SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'  # 引擎

其他公用設(shè)置項(xiàng):

SESSION_COOKIE_NAME = "sessionid"            # Session的cookie保存在瀏覽器上時(shí)的key,即:sessionid=隨機(jī)字符串(默認(rèn))

SESSION_COOKIE_PATH = "/"                # Session的cookie保存的路徑(默認(rèn))

SESSION_COOKIE_DOMAIN = None               # Session的cookie保存的域名(默認(rèn))

SESSION_COOKIE_SECURE = False              # 是否Https傳輸cookie(默認(rèn))

SESSION_COOKIE_HTTPONLY = True              # 是否Session的cookie只支持http傳輸(默認(rèn))

SESSION_COOKIE_AGE = 1209600               # Session的cookie失效日期(2周)(默認(rèn))

SESSION_EXPIRE_AT_BROWSER_CLOSE = False         # 是否關(guān)閉瀏覽器使得Session過(guò)期(默認(rèn))

SESSION_SAVE_EVERY_REQUEST = False            # 是否每次請(qǐng)求都保存Session,默認(rèn)修改之后才保存(默認(rèn))

以上是“Django怎么操作session”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI