Django 内置 Session 笔记
Session 是什么
Session 是 Django 内置的会话控制,为用户提供基础的数据存储。数据存储在服务器上。
Session 与 Cookie 关系
- 存储位置不同:Session 服务器端,Cookie 客户端浏览器。
- 从 Session 读取信息时,从 Cookie 里获取用户id,根据id找到对应session
运行与配置
在创建Django项目时,Django默认启用 Session 功能,每个用户的 Seession 通过Django 的中间件(Middleware)处理。
可以在 settings.py 文件 MIDDLEWARE 配置项中找到 "django.contrib.sessions.middleware.SessionMiddleware"。
这个 SessionMiddleware 相当于HTTP请求拦截器,根据信息判断结果来调用相应执行程序 "django.contrib.sessions"
可以在 settings.py 文件 INSTALLED_APPS 配置项中找到 "django.contrib.sessions"。
django.contrib.sessions 程序实现 对 session 对象的创建、存储、管理Session的生命周期(过期时间)等。
django.contrib.sessions 程序默认的存储是数据库,项目执行数据迁移时,自动在项目数据库中生成名为 django_sesstion 数据表。
django 提供了5种 Sesson 的存储方式,可以在 settings.py 添加配置信息 SESSION)ENGING 来指定 Session 的保存方式。
# 1. 数据库保存方式(默认方式)
# -Django默认的保存方式,使用该方法无须在settings.py中设置
SESSION_ENGINE = 'django.contrib.sessions.backends.db'
# 2. 以文件形式保存
SESSION_ENGINE = 'django.contrib.sessions.backends.file'
# -使用文本保存可设置文件保存路径
# -/MyDjango代表将文本保存在项目MyDjango的根目录
SESSION_FILE_PATH = '/MyDjango'
# 3. 以缓存形式保存
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
# -设置缓存名,默认是内存缓存方式,此处的设置与缓存机制的设置相关
SESSION_CACHE_ALIAS = 'default'
# 4. 以数据库+缓存形式保存
SESSION_ENGINE = 'django.contrib.sessions.backends.cached_db'
# 5. 以Cookie形式保存
SESSION_ENGINE = 'django.contrib.sessions.backends.signed_cookies'
浏览器 Cookie 的生命周期,传输方式和保存路径等相关配置,在settings.py 添加
# 浏览器 Cookie 以键值对形式保存 Session_key,默认键名:sessionid
SESSION_COOKIE_NAME = "sessionid"
# 设置浏览器的Cookie生效路径,默认值为“/”,即127.0.0.1:8000
SESSION_COOKIE_PATH = "/"
# 设置浏览器的Cookie生效域名
SESSION_COOKIE_DOMAIN = None
# 设置传输方式,若为False,则使用HTTP,否则使用HTTPS
SESSION_COOKIE_SECURE = False
# 设置Cookie的有效期,单位为秒,默认时间为两周
SESSION_COOKIE_AGE = 1209600
# 是否关闭浏览器使得Cookie过期,默认值为False
SESSION_EXPIRE_AT_BROWSER_CLOSE = False
# 是否每次发送后保存Cookie,默认值为False
SESSION_SAVE_EVERY_REQUEST = False
操作
Session 数据类型可以理解为 Python 的字典类型,主要在视图函数中执行读写操作,从用户请求对象中获取,也就视图函数的参数 request。
# request为视图函数的参数request
# 获取存储在Session的数据k1,若k1不存在,则会报错
request.session['k1']
# 获取存储在Session的数据k1,若k1不存在,则为空值
# get和setdefault实现的功能是一致的
request.session.get('k1', '')
request.session.setdefault('k1', '')
# 设置Session的数据,键为k1,值为123
request.session['k1'] = 123
# 删除Session中k1的数据
del request.session['k1']
# 删除整个Session
request.session.clear()
# 获取Session的键
request.session.keys()
# 获取Session的值
request.session.values()
# 获取Session的session_key
# 即数据表django_session的字段session_key
request.session.session_key
浙公网安备 33010602011771号