Django Session 完整指南:配置、操作与底层原理
本文详细介绍Django中Session的完整操作流程,涵盖数据库表初始化、读写删除API、过期时间设置及五种存储后端配置。深入解析Session ID生成机制与Cookie交互原理,帮助开发者掌握Django会话管理的核心技术与最佳实践。
Django Session 基础与数据库配置
Session数据存储在服务器端,在Django项目中启用Session功能前,必须确保数据库中已存在django_session表,所有Session相关数据均依赖该表进行持久化存储。
Session 数据的读写操作
获取Session数据
request.session['status']
request.session.get('status')#一般用get,无此键返回None不报错
设置Session数据
在使用Session功能前,务必先在数据库中创建对应的django_session表。
调用request.session时,系统首先检查请求头中的Cookie是否包含sessionid,并据此在数据库中查询比对。
若存在有效的sessionid,系统将生成新的sessionid进行覆盖更新,并将新生成的随机sessionid通过Cookie返回给前端。
若未找到匹配的sessionid,系统将新建一条记录,生成session_key,并将字典格式的数据加密后存入session_data字段。
通过request.session['status']=True可直接设置Session值,若键已存在则自动覆盖原值。
使用request.session.setdefault('k1',123)可在键不存在时设置默认值,若键已存在则保持原值不变。
Session 数据的删除与管理
删除Session数据
调用request.session.flush()可删除服务器端的Session数据,同时清除当前会话的Cookie。
调用request.session.clear_expired()可删除所有失效日期早于当前时间的Session数据,清理过期记录。
使用del request.session['k1']可在Django的Session表中同步删除指定的键值对。
调用request.session.delete()可删除当前会话的所有Session数据。
Session 常用辅助方法
更多Session操作方法
获取Session中所有的键、值及键值对。
使用request.session.keys()获取所有Session键名。
使用request.session.values()获取所有Session值。
使用request.session.items()获取所有Session键值对。
获取当前Session ID的值。
通过session_key = request.session.session_key可获取当前会话的Session ID。
检查指定Session Key是否存在于数据库中。
使用request.session.exists("session_key")可验证指定的sessionid(即session_key)在数据库中是否存在。
Session 过期时间设置
设置会话Session和Cookie的超时时间。
通过request.session.set_expiry(value)可配置Session的过期策略。
若value为整数,表示Session将在该秒数后失效。
若value为datetime或timedelta对象,Session将在指定的时间点或时间段后失效。
若value为0,用户关闭浏览器后Session将立即失效。
若value为None,Session将依赖全局配置的Session失效策略。
Session详细流程解析

Django Session 后端配置详解
Django中的Session配置
Django默认支持Session功能,内部提供了5种不同类型的Session后端供开发者选择。
1. 数据库Session
SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 引擎(默认)
2. 缓存Session
SESSION_ENGINE = 'django.contrib.sessions.backends.cache' # 引擎
SESSION_CACHE_ALIAS = 'default' # 使用的缓存别名(默认内存缓存,也可以是memcache),此处别名依赖缓存的设置
3. 文件Session
SESSION_ENGINE = 'django.contrib.sessions.backends.file' # 引擎
SESSION_FILE_PATH = None # 缓存文件路径,如果为None,则使用tempfile模块获取一个临时地址tempfile.gettempdir()
4. 缓存+数据库混合Session
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db' # 引擎
5. 加密Cookie Session
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies' # 引擎
其他公共配置项说明
SESSION_COOKIE_NAME = "sessionid" # Session的cookie保存在浏览器上时的key,即:sessionid=随机字符串(默认)
SESSION_COOKIE_PATH = "/" # Session的cookie保存的路径(默认)
SESSION_COOKIE_DOMAIN = None # Session的cookie保存的域名(默认)
SESSION_COOKIE_SECURE = False # 是否Https传输cookie(默认)
SESSION_COOKIE_HTTPONLY = True # 是否Session的cookie只支持http传输(默认)
SESSION_COOKIE_AGE = 1209600 # Session的cookie失效日期(2周)(默认)
SESSION_EXPIRE_AT_BROWSER_CLOSE = False # 是否关闭浏览器使得Session过期(默认)
SESSION_SAVE_EVERY_REQUEST = False # 是否每次请求都保存Session,默认修改之后才保存(默认)
总结
本文介绍了Django操作Session的方法,更多相关django操作session内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









