为什么会有cookie和session
由于http协议是无状态的,无法记住用户是谁
什么是cookie
cookie具体指的是一小段信息,他是服务器发送出来存储在浏览器是上的一组组键值对,下次访问服务器是浏览器会自动携带这些键值对,以便服务器提取有效信息,同时也意味着浏览器其实可以拒绝服务端的"命令", 默认情况下 浏览器都是直接让服务端设置键值对
cookie工作原理
cookie的工作原理是:由服务器产生内容,浏览器收到请求后保存在本地;当浏览器再次访问时,浏览器会自动带上Cookie,这样服务器就能通过Cookie的内容来判断这个是“谁”了。
Django中操作Cookie
django必会三板斧
return HttpResponse()
return render()
return redirect()
变形:
obj1 = HttpResponse()
return obj1
obj2 = render()
return obj2
obj3 = redirect()
return obj3
设置cookie
obj1.set_cookie()
获取
request.COOKIES.get()
删除
obj1.delete_cookie()
参数:
key, 键
value='', 值
max_age=None, 超时时间
expires=None, 超时时间(IE requires expires, so set it if hasn't been already.)
path='/', Cookie生效的路径,/ 表示根路径,特殊的:根路径的cookie可以被任何url的页面访问
domain=None, Cookie生效的域名
secure=False, https传输
httponly=False 只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)
session
session是保存在服务器上的键值对
django session默认的过期时间是14天
操作session
设置session
request.session['key'] = value # 仅仅只会在内存产生一个缓存
"""
1.django内部自动生成了随机的字符串
2.在django_session表中存入数据
session_key session_data date
随机字符串1 数据1 ...
随机字符串2 数据2 ...
随机字符串3 数据3 ...
3.将产生的随机字符串发送给浏览器 让浏览器保存到cookie中
sessionid:随机字符串
"""
获取session
request.session.get('key')
"""
1.浏览器发送cookie到django后端之后 django会自动获取到cookie值
2.拿着随机字符串去django_session表中比对 是否有对应的数据
3.如果比对上了 就讲随机字符串所对应的数据 取出赋值给request.session
如果对不上 那么request.session就是个空
"""
django session表是针对浏览器的
不同的浏览器来 才会有不同的记录
删除session
request.session.delete() # 只删除服务端的session
request.session.flush() # 浏览器和服务端全部删除
session也可以设置超时时间
request.session.set_expiry(value多种配置)
* 如果value是个整数,session会在些秒数后失效。
* 如果value是个datatime或timedelta,session就会在这个时间后失效。
* 如果value是0,用户关闭浏览器session就会失效。
* 如果value是None,session会依赖全局session失效策略。