搜尋
首頁後端開發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
Python的執行模型:編譯,解釋還是兩者?Python的執行模型:編譯,解釋還是兩者?May 10, 2025 am 12:04 AM

pythonisbothCompileDIntered。

Python是按線執行的嗎?Python是按線執行的嗎?May 10, 2025 am 12:03 AM

Python不是嚴格的逐行執行,而是基於解釋器的機制進行優化和條件執行。解釋器將代碼轉換為字節碼,由PVM執行,可能會預編譯常量表達式或優化循環。理解這些機制有助於優化代碼和提高效率。

python中兩個列表的串聯替代方案是什麼?python中兩個列表的串聯替代方案是什麼?May 09, 2025 am 12:16 AM

可以使用多種方法在Python中連接兩個列表:1.使用 操作符,簡單但在大列表中效率低;2.使用extend方法,效率高但會修改原列表;3.使用 =操作符,兼具效率和可讀性;4.使用itertools.chain函數,內存效率高但需額外導入;5.使用列表解析,優雅但可能過於復雜。選擇方法應根據代碼上下文和需求。

Python:合併兩個列表的有效方法Python:合併兩個列表的有效方法May 09, 2025 am 12:15 AM

有多種方法可以合併Python列表:1.使用 操作符,簡單但對大列表不內存高效;2.使用extend方法,內存高效但會修改原列表;3.使用itertools.chain,適用於大數據集;4.使用*操作符,一行代碼合併小到中型列表;5.使用numpy.concatenate,適用於大數據集和性能要求高的場景;6.使用append方法,適用於小列表但效率低。選擇方法時需考慮列表大小和應用場景。

編譯的與解釋的語言:優點和缺點編譯的與解釋的語言:優點和缺點May 09, 2025 am 12:06 AM

CompiledLanguagesOffersPeedAndSecurity,而interneterpretledlanguages provideeaseafuseanDoctability.1)commiledlanguageslikec arefasterandSecureButhOnderDevevelmendeclementCyclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesclesandentency.2)cransportedeplatectentysenty

Python:對於循環,最完整的指南Python:對於循環,最完整的指南May 09, 2025 am 12:05 AM

Python中,for循環用於遍歷可迭代對象,while循環用於條件滿足時重複執行操作。 1)for循環示例:遍歷列表並打印元素。 2)while循環示例:猜數字遊戲,直到猜對為止。掌握循環原理和優化技巧可提高代碼效率和可靠性。

python concatenate列表到一個字符串中python concatenate列表到一個字符串中May 09, 2025 am 12:02 AM

要將列表連接成字符串,Python中使用join()方法是最佳選擇。 1)使用join()方法將列表元素連接成字符串,如''.join(my_list)。 2)對於包含數字的列表,先用map(str,numbers)轉換為字符串再連接。 3)可以使用生成器表達式進行複雜格式化,如','.join(f'({fruit})'forfruitinfruits)。 4)處理混合數據類型時,使用map(str,mixed_list)確保所有元素可轉換為字符串。 5)對於大型列表,使用''.join(large_li

Python的混合方法:編譯和解釋合併Python的混合方法:編譯和解釋合併May 08, 2025 am 12:16 AM

pythonuseshybridapprace,ComminingCompilationTobyTecoDeAndInterpretation.1)codeiscompiledtoplatform-Indepententbybytecode.2)bytecodeisisterpretedbybythepbybythepythonvirtualmachine,增強效率和通用性。

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脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具