Django中的session常見配置

python小白2006發表於2020-10-18

Django - session

  • request.session
  • session 適合存放 和使用者相關的資料
  • session 存放的資料必須能被 json 序列化
  • session 是一個類似於字典的容器
  • session 的預設存活時間預設是2周

Session 的工作原理

當使用者使用 session的時候, 伺服器 會 從 瀏覽器的 Cookie 中查詢一個 cookie 的 name = sessionid
如果 能夠找到 對應的 cookie , 則獲取 sessionid 對應的 value, 通過 value 在伺服器獲取 session
如果 沒有找到對應的 cookie , 伺服器會建立一個新的 session物件,並將 session物件的 ID 作為 value,
將 sessionid 作為 name, 寫入到 瀏覽器的 cookie 中

session 常見的配置


# 設定瀏覽器cookie 對應的 key
SESSION_COOKIE_NAME = 'sessionid'

# 設定session的預設存活時間
SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2

# 設定從專案根下獲取 Cookie
SESSION_COOKIE_PATH = "/"

# 設定 session是否隨瀏覽器的關閉而消亡
SESSION_EXPIRE_AT_BROWSER_CLOSE= False

# 設定 session資料的序列化器類
SESSION_SERIALIZER = django.contrib.sessions.serializers.JSONSerializer

session 中常見的方法

  • session 儲存
session[key] = val

session.setdefault(key, val)

  • session 消亡
session.flush()
  • 設定session存活時間

session.set_expiry(val)

val 如果是一個數字,則代表 剩餘多少秒消亡

val 是一個日期,則到日期時間點 消亡

  • 清除過期的 session
session.clear_expired()

session 相關的表 django-session

session_key : session的ID

session_data : session序列化的資料

expire_data : session的過期時間

django 使用者登入

  • authenticate(request, username, password) : 會驗證使用者名稱、密碼,如果正確,返回 user物件

  • login(request, user) : user 就是 authenticate 返回的認證後的 user 物件

  • logout(request) : 退出登入

判斷使用者是否登入

request.user.is_anonymous 判斷當前使用者是否是匿名使用者

相關文章