2.session是什么?
保存在服务器上的一组组键值对
HTTP是无协议状态,每次请求都是互相独立的,没有办法保存状态
4.
浏览器将键值对保存在本地,有权利不保存,下次访问是继续携带
django中操作cookie
# 设置cookie response = HttpReponse('xxx') response.set_cookie(key,value) # max_age 超时时间 path 生效的路径 response.set_signed_cookie(key,value,salt='xxx') # 获取cookie request.COOKIES {} .get(key) request.get_signed_cookie(key,salt='xxx',default='') # 删除cookie 将值设置为空 超时时间设置为0 response.delete_cookie(key)
6.session的过程
第一个请求,没有cookie,设置键值对,根据浏览器生成一个唯一表是,给一个字典设置键值对
将字典转成字符串(json序列化)进行加密,将唯一标识和字符串保存在数据库中(django-session)返回给浏览器唯一标识(sessionid)的cookie,下次请求携带sessionid,服务器根据session找到对应的数据(session-data)进行解密,进行反序列化,根据key获取对应的值
# 设置session reqeust.session[key] = value # 获取 reqeust.session[key] reqeust.session.get(key) # 删除 request.session.pop(key) del reqeust.session[key] request.session.delete() # 删除所有的键值对 不删除cookie request.session.flush() # 删除所有的键值对 也删除cookie # 其他 默认的超时时间(2周) request.session.set_expiry(value) # 设置超时时间 request.session.clear_expired() # 清除已经失效的session数据 from django.conf import global_settings SESSION_COOKIE_NAME = 'sessionid' SESSION_COOKIE_AGE = 60 * 60 * 24 * 7 * 2 SESSION_SAVE_EVERY_REQUEST = True # 每次请求都更新session数据 SESSION_EXPIRE_AT_BROWSER_CLOSE = True # cookie在浏览器关闭时就失效 SESSION_ENGINE = 'django.contrib.sessions.backends.db' # 默认是数据库 文件 缓存 数据库+缓存 加密cookie