搜尋
首頁後端開發Python教學Django 中的身份驗證和授權:Django 會話

Authentication and Authorization in Django: Django session

Django 會話簡介

在現代 Web 應用程式中,跨多個請求維護使用者狀態對於建立個人化體驗至關重要。 Django 透過其內建的會話框架簡化了這個過程,使開發人員能夠安全有效地管理使用者資料。

Django 中的內建會話負責管理多個請求上的使用者資料。當使用者登入 Django 應用程式時,伺服器會建立會話 ID,通常儲存在用戶端瀏覽器上的 cookie 中。此會話 ID 用作檢索伺服器上儲存的資料並將請求連結到特定使用者的金鑰。這就是為什麼身份驗證狀態將在不同頁面上持續存在的原因。


在 Django 中使用會話中間件

Django 的會話中間件可以自動化會話管理。它處理傳入請求以檢索會話資料並準備傳出回應以更新或設定會話 cookie。若要檢查會話中間件是否已啟用,請查看 MIDDLEWARE 部分下的 settings.py 檔案:

# settings.py
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    # Other middleware
]


Django 中的會話儲存類型

我們有多種保存會話資料的選項。根據您想要建立的應用程序,每個應用程式都有優點和缺點。

1. 資料庫支援的會話

類比:想像劇場有一個安全的儲藏室,裡面有置物櫃,所有外套都存放在那裡。每個儲物櫃都分配有一個與您門票上的號碼相符的唯一號碼。當你拿著票回來時,服務員會在日誌中找到儲物櫃號碼並取回你的外套。

資料庫支援的會話將會話資料保存在資料庫伺服器上。因此,用戶首選項、登入狀態和購物車詳細資訊等敏感資訊仍安全地保存在後端。這種類型的會話可能更安全,但在涉及寫入和讀取過程時會造成一些不便。與快取支援的會話相比,資料庫支援的會話速度較慢,因此,如果您正在建立流量較高的應用程序,那麼您應該再考慮一下。在資料庫中儲存會話會增加資料庫的負載,如果管理不當,會影響整體效能。

如果你想使用資料庫支援的會話,你需要將 django.contrib.sessions 加入到你的 INSTALLED_APPS 設定中。請確保執行manage.py migrate來安裝儲存會話資料的單一資料庫表。

2. 基於文件的會話

類比:在這種情況下,每件外套都存放在劇院後面一個大房間裡不同的、貼有標籤的儲物櫃中。每個儲物櫃都有一個獨特的標籤或文件,其中包含外套詳細信息,當您出示門票時,服務員會前往更衣室,找到相應的標籤,並取回您的外套。

基於檔案的會話使用伺服器的檔案系統來保存會話資料。這意味著每個使用者會話都儲存在伺服器上的單獨檔案中。預設情況下,Django 將會話檔案儲存在 /tmp 下的 django_session 目錄中(在基於 Unix 的系統上)或 Django 設定中指定的目錄中。

若要啟用基於檔案的會話,請在 settings.py 檔案中將 SESSION_ENGINE 設定為 django.contrib.sessions.backends.file。

# settings.py
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    # Other middleware
]

3. 緩存支援的會話

類比:這裡,劇場在入口處使用了一個臨時衣帽架,只存放短暫的外套。這使得取外套變得非常快,但如果架子已滿,最舊的外套可能會移至二級存儲或完全移除。

這種類型的會話儲存是快取系統(例如 Memcached 或 Redis)儲存會話資料的地方。將會話保存在記憶體快取中將有助於高流量或需要快速響應時間的應用程序,因為寫入或讀取過程非常快。

若要使用快取支援的會話,請在 settings.py 檔案中設定 SESSION_ENGINE 設定。您還必須根據您使用的快取記憶體配置快取。

# settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.file'  # Use file-based session storage
SESSION_FILE_PATH = '/path/to/session/files/'  # Specify a directory for session files (optional)

或者,您可以使用 django.contrib.sessions.backends.cached_db ,它將會話資料儲存在快取和資料庫中,如果快取不可用,則回退到資料庫。

使用此類會話的最佳優勢是可擴展性和速度。快取支援的會話不僅速度快,因為將資料保存在記憶體中,而且還減少了資料庫會話的負載。數據可以跨伺服器共享,從而使多伺服器設定成為可能。

4. 簽署 cookie 會話

類比:在這裡,劇院允許你隨身攜帶外套,而不是把你的外套存放起來,但要求你在門票上蓋上特殊的印章,以證明這是你的外套。你隨身攜帶外套(場次數據),每次進入劇院時,服務員都會檢查門票上的印章,以確保它沒有被篡改。

Django 中的簽章 cookie 會話將會話資料直接儲存在用戶端瀏覽器上的簽章和加密 cookie 中,而不是儲存在伺服器端(資料庫或快取)。

若要啟用簽章 cookie 會話,請在 Django 的 settings.py 檔案中設定 SESSION_ENGINE 以使用簽章 cookie 後端:

# settings.py
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    # Other middleware
]

簽署 Cookie 會話,這可以減少伺服器負載並釋放伺服器資源。但是,由於 Cookie 的大小限制(約 4 KB),簽署 Cookie 會話不適合儲存大量會話資料。較大的 cookie 大小可能會導致請求速度變慢,因為 cookie 資料會隨每個請求一起傳送。


會話配置設定

Django 提供了多種設定來設定會話行為:

  • SESSION_COOKIE_AGE:設定會話過期時間(以秒為單位)。

  • SESSION_COOKIE_SECURE:需要透過 HTTPS 傳送會話。

  • SESSION_EXPIRE_AT_BROWSER_CLOSE:瀏覽器關閉時結束會話。

  • SESSION_COOKIE_HTTPONLY:限制 JavaScript 對會話 cookie 的訪問,增強安全性。

這些設定有助於根據特定應用程式需求自訂會話行為。有關會話配置的更多信息,請閱讀 Django 文件。


在 Django 視圖中實現會話

要與 Django 視圖中的會話進行交互,請使用 request.session 對象,其行為類似於字典。以下是一些基本操作:

儲存資料:

# settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.file'  # Use file-based session storage
SESSION_FILE_PATH = '/path/to/session/files/'  # Specify a directory for session files (optional)

擷取資料:

# settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'  # For caching session storage
SESSION_CACHE_ALIAS = 'default'  # Specify the cache alias if needed (e.g., 'redis' or 'memcached')

# Cache configuration (example with Redis)
CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://127.0.0.1:6379/1',  # Redis URL
        'OPTIONS': {
            'CLIENT_CLASS': 'django_redis.client.DefaultClient',
        }
    }
}

刪除資料:

# settings.py
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
SECRET_KEY = 'your-secret-key'  # Make sure this key is kept secure and unique for your app

會話的常見用途是追蹤使用者登入狀態。以下是如何使用會話實現簡單的登入系統:

request.session['username'] = 'Harry Potter'

Django視圖中session的方法還是有很多的。如需完整列表,請查看 Django 文件。


會議最佳實踐

Django 定期刪除過期的會話。您可以透過設定會話清理程序或執行 django-admin clearsessions 等管理指令來自訂頻率。

避免在會話中儲存大量數據,因為這可能會增加伺服器負載並減慢回應時間。最後啟用安全性 cookie、HttpOnly 和 HTTPS 設定來保護會話資料。


結論

Django 的會話框架功能強大、靈活且安全,讓您可以輕鬆地在 Web 應用程式中實現會話管理。透過正確的配置和安全實踐,您可以利用 Django 會話創建高效、個人化的使用者體驗,同時保持強大的安全性。

以上是Django 中的身份驗證和授權:Django 會話的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何解決Linux終端中查看Python版本時遇到的權限問題?如何解決Linux終端中查看Python版本時遇到的權限問題?Apr 01, 2025 pm 05:09 PM

Linux終端中查看Python版本時遇到權限問題的解決方法當你在Linux終端中嘗試查看Python的版本時,輸入python...

我如何使用美麗的湯來解析HTML?我如何使用美麗的湯來解析HTML?Mar 10, 2025 pm 06:54 PM

本文解釋瞭如何使用美麗的湯庫來解析html。 它詳細介紹了常見方法,例如find(),find_all(),select()和get_text(),以用於數據提取,處理不同的HTML結構和錯誤以及替代方案(SEL)

python對象的序列化和避難所化:第1部分python對象的序列化和避難所化:第1部分Mar 08, 2025 am 09:39 AM

Python 對象的序列化和反序列化是任何非平凡程序的關鍵方面。如果您將某些內容保存到 Python 文件中,如果您讀取配置文件,或者如果您響應 HTTP 請求,您都會進行對象序列化和反序列化。 從某種意義上說,序列化和反序列化是世界上最無聊的事情。誰會在乎所有這些格式和協議?您想持久化或流式傳輸一些 Python 對象,並在以後完整地取回它們。 這是一種在概念層面上看待世界的好方法。但是,在實際層面上,您選擇的序列化方案、格式或協議可能會決定程序運行的速度、安全性、維護狀態的自由度以及與其他系

如何使用TensorFlow或Pytorch進行深度學習?如何使用TensorFlow或Pytorch進行深度學習?Mar 10, 2025 pm 06:52 PM

本文比較了Tensorflow和Pytorch的深度學習。 它詳細介紹了所涉及的步驟:數據準備,模型構建,培訓,評估和部署。 框架之間的關鍵差異,特別是關於計算刻度的

Python中的數學模塊:統計Python中的數學模塊:統計Mar 09, 2025 am 11:40 AM

Python的statistics模塊提供強大的數據統計分析功能,幫助我們快速理解數據整體特徵,例如生物統計學和商業分析等領域。無需逐個查看數據點,只需查看均值或方差等統計量,即可發現原始數據中可能被忽略的趨勢和特徵,並更輕鬆、有效地比較大型數據集。 本教程將介紹如何計算平均值和衡量數據集的離散程度。除非另有說明,本模塊中的所有函數都支持使用mean()函數計算平均值,而非簡單的求和平均。 也可使用浮點數。 import random import statistics from fracti

用美麗的湯在Python中刮擦網頁:搜索和DOM修改用美麗的湯在Python中刮擦網頁:搜索和DOM修改Mar 08, 2025 am 10:36 AM

該教程建立在先前對美麗湯的介紹基礎上,重點是簡單的樹導航之外的DOM操縱。 我們將探索有效的搜索方法和技術,以修改HTML結構。 一種常見的DOM搜索方法是EX

如何使用Python創建命令行接口(CLI)?如何使用Python創建命令行接口(CLI)?Mar 10, 2025 pm 06:48 PM

本文指導Python開發人員構建命令行界面(CLIS)。 它使用Typer,Click和ArgParse等庫詳細介紹,強調輸入/輸出處理,並促進用戶友好的設計模式,以提高CLI可用性。

哪些流行的Python庫及其用途?哪些流行的Python庫及其用途?Mar 21, 2025 pm 06:46 PM

本文討論了諸如Numpy,Pandas,Matplotlib,Scikit-Learn,Tensorflow,Tensorflow,Django,Blask和請求等流行的Python庫,並詳細介紹了它們在科學計算,數據分析,可視化,機器學習,網絡開發和H中的用途

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境