cookie<------>session
什么是cookie:
保存在浏览器上的一组键值对.
为什么有cookie:
http协议是无状态,每次请求都是无关联的,没办法保存状态.使用cookie保存状态.
cookie的特性:
1.由服务器让浏览器进行设置的
2.浏览器有权不设置
3.下次访问时自动携带响应的cookie
Django中的操作:
设置:
1,设置普通cookie
response.set_cookie(key,value,max_age=5,)
2,设置加密cookie
response.set_signed_cookie(key,value,max_age=5,salt='xxx')
key(键)
value(值)
max_age=None(超时时间)
salt='xx'(要加密的盐)
path='/'(路径,/表示根路径,根路径的cookie可以被任何url的页面访问)
domain=None, Cookie生效的域名
secure=False, https传输
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
获取:
1,获取未加密的cookie(两种)
request.COOKIES[ke]
request.COOKIES.get(key)
2,获取加密的cookie
request.get_signed_cookie(key,salt='xxx',default=' ')
default: 默认值
删除:
response.delete_cookie(key)
什么是session:
保存在服务器上的一组键值对.-----(依赖于cookie)
为什么有session:
1.cookie保存在浏览器本地,不安全
2.cookie有长度限制,个数限制.
Django中的操作:
设置:
request.session[key] = value (存在修改,不存在添加)
request.session.setdefault(key,value) (存在不修改,不存在添加)
request.session.set_expiry(5) (设置超时时间)
获取:
request.session[key]
request.session.get(key)
删除:
del request.session[key]
其他:
request.session.exists("session_key") ----/检查会话session的key在数据库中是否存在
request.session.set_expiry(value) 设置会话Session和Cookie的超时时间
如果value是个datatime或timedelta,session就会在这个时间后失效。
如果value是0,用户关闭浏览器session就会失效。
如果value是None,session会依赖全局session失效策略。
配置:
from django.conf import global_settings,settings # 全局的配置和局部的配置
from django.contrib.sessions.backends import db