# 状态保持 HTTP协议是无状态的:每次请求都是一次新的请求,不会记得之前通信的状态, 客户端与服务器端的一次通信,就是一次会话, 会话结束,就都忘了,HTTP是严重老年痴呆患者。 有时候通讯必须要保持状态,知道你上次来访的结果等,就需要一种特殊的方式能够记住上次 来访信息实现状态保持。实现的方式一般是在客户端或服务器端存储与会话有关的数据。 - 用来存储信息的方式包括cookie、session - 会话一般指session对象,session存放在服务器端, - 也可以使用cookie,所有数据存储在客户端,cookie一般不保存重要信息 - 或者同时使用。 - 推荐使用sesison方式,所有数据存储在服务器端,在客户端cookie中存储session_id - 状态保持的目的是在一段时间内跟踪请求者的状态,可以实现跨页面访问当前请求者的数据 >注意:不同的请求者之间不会共享这个数据,与请求者一一对应 > ## 开启session - 使用django-admin startproject创建的项目默认启用 - 禁用会话:删除下面指定的两个值,禁用会话将节省一些性能消耗 >Django 中session需要依赖数据库,因此需要确认数据库中是否存在与session相关的表 在`settings.py`文件中设置: - INSTALLED_APPS列表中添加: 'django.contrib.sessions', - MIDDLEWARE_CLASSES列表中添加: 'django.contrib.sessions.middleware.SessionMiddleware', ## 使用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() ## 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)