4. 状态保持¶
HTTP协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态, 客户端与服务器端的一次通信,就是一次会话, 会话结束,就都忘了,HTTP是严重老年痴呆患者。
有时候通讯必须要保持状态,知道你上次来访的结果等,就需要一种特殊的方式能够记住上次 来访信息实现状态保持。实现的方式一般是在客户端或服务器端存储与会话有关的数据。
- 用来存储信息的方式包括cookie、session
- 会话一般指session对象,session存放在服务器端,
- 也可以使用cookie,所有数据存储在客户端,cookie一般不保存重要信息
- 或者同时使用。
- 推荐使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储session_id
- 状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据
注意:不同的请求者之间不会共享这个数据,与请求者一一对应
4.1. 开启session¶
- 使用django-admin startproject创建的项目默认启用
- 禁用会话:删除下面指定的两个值,禁用会话将节省一些性能消耗
Django 中session需要依赖数据库,因此需要确认数据库中是否存在与session相关的表
在settings.py
文件中设置:
INSTALLED_APPS列表中添加:
'django.contrib.sessions',
MIDDLEWARE_CLASSES列表中添加:
'django.contrib.sessions.middleware.SessionMiddleware',
4.2. 使用session¶
启用会话后,每个HttpRequest对象将具有一个session属性,它是一个类字典对象
get(key, default=None):根据键获取会话的值
clear():清除所有会话
flush():删除当前的会话数据并删除会话的Cookie
del request.session[‘member_id’]:删除会话 示例:
#session设置 request.session[key] = value #session获取 request.session.get(key,default=Node) #session删除 # 删除单个key 不存在时报错 del request.session['a'] #清除所有会话,但不会删除数据 request.session.clear() #删除当前的会话数据 request.session.flush()
4.3. session配置¶
session的一些属性可以通过配置文件进行配置, 常见的有生存时间,访问相关的属性等。
在 settings.py 文件中进行设置:
# session 设置 SESSION_COOKIE_AGE = 60 * 30 # 30分钟 SESSION_SAVE_EVERY_REQUEST = True #如果SESSION_SAVE_EVERY_REQUEST是True,会话cookie将在每个请求中发送 SESSION_EXPIRE_AT_BROWSER_CLOSE = True # 关闭浏览器,则COOKIE失效
以下设置为:10秒后过期
# request.session['abc'] = 'abcdef' # request.session.set_expiry(10)