Cookie与Session
Posted majingjie
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Cookie与Session相关的知识,希望对你有一定的参考价值。
Cookie和Session组件
cookie:保存在客户端浏览器上的键值对
session:保存在服务端上的键值对,服务端产生随机串返回给客户端,服务端找一个地方将串与对应的信息存起来’随机字符串’:’敏感信息’
Cookie
HttpResponse类
obj = HttpResponse()
return obj # 等价于return HttpResponse()
obj = render()
return obj # 等价于return render()
obj = redirect()
return obj # 等价于return redirect()
设置cookie
obj = HttpResponse()
obj.set_cookie() # 给浏览器设置cookie
获取cookie
request.COOKIE.get('name')
request.COOKIE['name']
基于Cookie的用户登录装饰器
from functools import warps
def login_auth(func):
@warps(func)
def inner(request,*args,**kwargs)
# 校验cookie
old_path = request.get_full_path() # 拿到跳转前的url
if request.COOKIE.get('name'):
return func(request,*args,**kwargs)
return redirect('/login/?next=%s' % old_path)
return inner
基于Cookie的用户登录
def login(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
if username == 'jason' and password == '123':
old_path = request.GET.get('next')
if old_path:
obj = redirect(old_path)
else:
obj = redirect('/home/')
# 用户登录成功,向浏览器设置一个cookie
obj.set_cookie('name','jason',expires=7)
# expires表示有效时间
return obj
return render(request,'login.html')
删除cookie
def logout(request):
rep = redirect("/login/")
rep.delete_cookie("user") # 删除用户浏览器上之前设置的usercookie值
return rep
session
设置session
request.session['name'] = 'jason'
- 先生成一个随机的字符串
- 在django session表中存储该随机字符串与数据的记录
- 将随机的字符串发送给客户端浏览器
浏览器会设置一个键为session来存放session值
获取session
request.session.get('name')
- django自动获取浏览器随机字符串去django session表里面比对
- 如果比对成功,会将当前随机字符串对应的数据复制给request.session
- 通过request.session操作该数据(数据不存在也不会影响业务逻辑)
删除session
# 删除当前会话的所有Session数据
request.session.delete()
# 删除当前的会话数据并删除会话的Cookie。
request.session.flush()
# 这用于确保前面的会话数据不可以再次被用户的浏览器访问
# 例如,django.contrib.auth.logout() 函数中就会调用它。
设置会话session和cookie的超时时间
request.session.set_expiry(value)
# 如果value是个整数,session会在些秒数后失效。
# 如果value是个datatime或timedelta,session就会在这个时间后失效。
# 如果value是0,用户关闭浏览器session就会失效。
# 如果value是None,session会依赖全局session失效策略。
Django默认的session存活时间是两周(14天)
以上是关于Cookie与Session的主要内容,如果未能解决你的问题,请参考以下文章