状态保持
- http协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态
- 客户端与服务器端的一次通信,就是一次会话
- 实现状态保持的方式:在客户端或服务器端存储与会话有关的数据
- 存储方式包括cookie、session,会话一般指session对象
- 使用cookie,所有数据存储在客户端,注意不要存储敏感信息
- 推荐使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储session_id
- 状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据
- 注意:不同的请求者之间不会共享这个数据,与请求者一一对应
设置cookie通过HttpResponse对象来设置,也可以设置值过期时间,
设置cookie HttpResponse.set_cookie(键,值,过期时间)
过期时间max_age 和expirys 二选1
删除cookie HttpResponse.delete_cookie(键) 键不存在什么都不发生
获取cookie request.COOKIE.get(键,默认值)
启用session
- 使用django-admin startproject创建的项目默认启用
- 在settings.py文件中
项INSTALLED_APPS列表中添加:
'django.contrib.sessions',
项MIDDLEWARE_CLASSES列表中添加:
'django.contrib.sessions.middleware.SessionMiddleware',
- 禁用会话:删除上面指定的两个值,禁用会话将节省一些性能消耗
使用session
- 启用会话后,每个HttpRequest对象将具有一个session属性,它是一个类字典对象
- get(key, default=None):根据键获取会话的值
- request.session.get(‘uname’,’’)
- clear():清除所有会话
- flush():删除当前的会话数据并删除会话的Cookie
- del request.session['uname']:删除会话
会话过期时间
- set_expiry(value):设置会话的超时时间
- 如果没有指定,则两个星期后过期
- 如果value是一个整数,会话将在values秒没有活动后过期
- 如果value是一个timedelta对象,会话将在当前时间加上这个指定的日期/时间过期。SESSION_SERIALIZER='django.contrib.sessions.serializers.PickleSerializer'
- 如果value为0,那么用户会话的Cookie将在用户的浏览器关闭时过期
- 如果value为None,那么会话永不过期