cookie和session的用法和区别
在项目中使用于 登录验证和权限校验还有菜单生成
cookie就是保存在浏览器本地的一组组键值对 cookie的请求头是:set_cookie
为什么使用cookie
是因为HTTP协议是无序的,无状态就是每次请求都是独立的,执行页面前后没有相应的关系
cookie的工作原理
浏览器访问服务器的时候,会带着一个空的cookie,然后由浏览器产生内容 保存在浏览器本地
cookie的特点
1.cookie是服务器让浏览器进行设置的
2.浏览器保存在浏览器本地
3.下次访问时自动携带
应用场景
cookie是保存信息的 大多应用在 登录,保存登录习惯,简单的投票
cookie的设置
ret = reditect('index) / HttpResponse / render
不加盐的: ret.set_cookie(key,value)
加盐的: ret.set_signed_cookie(key,value,'盐')
cookie的获取
不加盐的: request.COOKIES.get() / 也可以当作字典取值 COOKIES['key']
加盐的: request.get_signed_cookie('key',salt='加密盐',default='获取不到显示的异常',max_age=None,有效时间(秒))
cookie的删除
ret=redirect('/login/')
ret.delete_cookie('key')
cookie的设置 (参数)
key 键 value 值 max_age=None 超时时间 path='/' cookie的生效路径,/表示根目录, 根目录可以被任何url使用
domain=None, Cookie生效的域名
secure=False, https传输
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
session是保存在服务器(文件中,数据库)上的一组组键值对(必须依赖cookie)
为什么要有session
1.cookie保存在浏览器本地,不安全
2.cookie对大小.个数有限制
session的设置
request.session[key] = value
request.session.setdefault('k1',value) # 存在则不设置
帮你生成随机字符串,帮你将这个随机字符串和用户数据(加密后)和过期时间保存到了django-session表里面,
帮你将这个随机字符串以sessionid:随机字符串的形式添加到cookie里面返回给浏览器
但是注意一个事情,django-session这个表,你不能通过orm来直接控制,因为你的models.py里面没有这个对应关系
session的删除
del request.session['k1'] django-session表里面同步删除
request.session.delete() 删除当前会话的所有Session数据
request.session.flush() 删除当前的会话数据并删除会话的Cookie。
获取session所有的键,值,键值对
request.session.keys() 在py文件中
request.session.values()
request.session.items()
request.session.存进session是的名 在html文件中