cookie
1.会话技术
2.客户端的会话技术( 数据库保存在浏览器上)
3.问题导致原因: 在web应用中,一次网络请求是从request开始,到response结束,跟以后的请求或者跟其他请求没有关系
导致每次请求之间的数据没有关系 (短链接,长连接:QQ)
解决: 在客户端保留数据(cookie)或者服务端保留数据(session)来建立关系
4.cookie的使用
1.存
格式: response.set_cookie(key,value)
通过response通知浏览器要保存key,value形式的cookie
示例:
def session_and_cookie(req):
req.session['int'] = '正军'
resp = HttpResponse('设置cookie') #可以改成重定向等,但
# 改成重定向的话函数或者类需要写在视图view里面,这与django的请求生命周期有关
resp.set_signed_cookie('uname',json.dumps('凯子'))
resp.set_cookie('name','qwertui')
resp.set_signed_cookie('shaxx','biding',salt='shax') #带签名的cookie(加盐)
return resp
2. 取
如果浏览器保留了cookie,那么每次请求该服务器的时候,会自动的携带该cookie
格式: request.COOKIES.get(key)
示例:
def get_session_and_cookie(req):
data = {
'key':req.session.get('int'),
'name':req.COOKIES.get('name'),
'uname':req.COOKIES.get('uname'),
'shaxx':req.get_signed_cookie('shaxx',salt='shax') #获取带签名的cookie(盐要相同,不然拿不到)
}
return JsonResponse(data)
3.设置过期时间
默认情况下,关闭浏览器cookie就会过期,有时候我们需要设置过期时间:
格式: response.set_cookie(key,value,expires=值)
expires=0 立马过期
expires=None 用不过期
expires= 值 单位是秒
expires=timedelta(days=值) 表示多少天后过期 hours=值 表示多少小时后过期.....
4.删除
response.delete_cookie(key)
5.cookie的应用场景:1.保存账号,密码 2.京东的购物车 3.保留用户的浏览信息 .....
**cookie中文问题: response.set_cookie(key,json.dumps(value)) 即可
注意:设置好cookie之后一定要返回给浏览器
cookie原理图
session
1.会话技术
2.服务端的会话技术
3.需要客户端的支持才可以
4.使用:
1.存
格式: request.session[key] = value
注意:在django中存储了一个session后,django会 自动 的生成session key,并将session key与 数据自
动的存储到 django_session表中去,数据会自动的用base64编码,并会 自动 的让浏览器的cookie存储
sessionid(就是sessison key) (在使用session前需要先做数据迁移)
2.取
格式: value = request.session.get(key)
注意: 在django中,会 自动 的将cookie中的sessionid拿出来跟数据库中的session key匹配,匹配成功后既可以获取值
3.清除
1.清除对应的cookie
2. del request.session
推荐的:3. request.session.flush() 会清楚对应的cookie及session
5.应用: 用户登陆认证