cookie和session


cookie
保存在客户端浏览器上的键值对


session
保存在服务端上的键值对
服务端产生随机的串儿返回给客户端,服务端找一个地方将串儿与对应的信息存起来{'随机字符串':'敏感信息'}

django
    return HttpResponse()
    return render()
    return redirect()


obj = HttpResponse()
return obj

    obj = render()
    return obj
    obj = redirect()
    return obj



设置cookie

obj.set_cookie() # 给浏览器设置cookie


获取cookie

request.COOKIE.get('name')
request.COOKIE['name']
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*24*3600)
return obj
return render(request,'login.html')

from functools import wraps
def login_auth(func):
@wraps(func)才
def inner(request,*args,**kwargs):
# 校验cookie
# print(request.get_full_path())
old_path = request.get_full_path()
if request.COOKIES.get('name'):
return func(request,*args,**kwargs)
return redirect('/login/?next=%s'%old_path)
return inner


def logout(request):
rep = redirect("/login/")
rep.delete_cookie("user") # 删除用户浏览器上之前设置的usercookie值
return rep

set_cookie()
request.COOKIES
delete_cookie

session
设置session

request.session['name'] = 'jason'
    # 1.先生成一个随机的字符串
    # 2.在django session表中存储该随机字符串与数据的记录
    # 3.将随机的字符串发送给客户端浏览器


获取session

request.session.get('name')
    # 1.django自动获取浏览器随机字符串取django session表里面比对
    # 2.如果比对成功 会将当前随机字符串对应的数据赋值给request.session
    # 3.通过request.session操作该数据(数据不存在也不会影响我们的业务逻辑)



浏览器会设置一个键为sessionid来存放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天)