7.4 状态保持
状态保持
HTTP协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态 客户端与服务器端的一次通信,就是一次会话 实现状态保持的方式:在客户端或服务器端存储与会话有关的数据 存储方式包括cookie、session,会话一般指session对象 使用cookie,所有数据存储在客户端,注意不要存储敏感信息 推荐使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储session_id 状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据 注意:不同的请求者之间不会共享这个数据,与请求者一一对应
1. 开启session
使用django-admin startproject创建的项目默认启用 禁用会话:删除下面指定的两个值,禁用会话将节省一些性能消耗 Django 中session需要依赖数据库,因此需要确认数据库中是否存在 与session相关的 表 在settings.py文件中
- 项INSTALLED_APPS列表中添加:
'django.contrib.sessions',
项MIDDLEWARE_CLASSES列表中添加:
- 'django.contrib.sessions.middleware.SessionMiddleware',
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() ```
3. 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失效
#来自 <https://docs.djangoproject.com/en/1.11/topics/http/sessions/>
以下设置为:10秒后过期
# request.session['abc'] = 'abcdef'
# request.session.set_expiry(10)