首页 后端开发 Python教程 Django 中的身份验证和授权:Django 会话

Django 中的身份验证和授权:Django 会话

Dec 09, 2024 am 06:32 AM

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

热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

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
Python vs.C:申请和用例 Python vs.C:申请和用例 Apr 12, 2025 am 12:01 AM

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

Python:游戏,Guis等 Python:游戏,Guis等 Apr 13, 2025 am 12:14 AM

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

Python与C:学习曲线和易用性 Python与C:学习曲线和易用性 Apr 19, 2025 am 12:20 AM

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

Python和时间:充分利用您的学习时间 Python和时间:充分利用您的学习时间 Apr 14, 2025 am 12:02 AM

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python vs.C:探索性能和效率 Python vs.C:探索性能和效率 Apr 18, 2025 am 12:20 AM

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

Python:自动化,脚本和任务管理 Python:自动化,脚本和任务管理 Apr 16, 2025 am 12:14 AM

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

Python标准库的哪一部分是:列表或数组? Python标准库的哪一部分是:列表或数组? Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

学习Python:2小时的每日学习是否足够? 学习Python:2小时的每日学习是否足够? Apr 18, 2025 am 12:22 AM

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

See all articles