Django-cookie

1、前言

cookie:是保存在客户端浏览器上的一个文件,本质上以键值对的形式保存,类似字典{‘username':'wang'},与服务器没有关系,当浏览器向服务器发送请求时,服务器会自动生成一个随机的字符串保存在cookie中返回给客户端,这样当客户端下次访问时,会带着这个cookie访问服务器,经过检查此cookie已存在此随机字符串,表示此客户端为已通过认证的状态,可以直接登录。

2、参数介绍

2.1、max_age=1:cookie生效的时间,单位是秒

2.2、expire:具体过期时间

2.3、path='/':cookie生效的路径,/表示根路径,特殊的,根路径的cookie可以被任何URL访问

2.4、domain:cookie生效的域名

2.5、secure=False:https传输,与安全相关

2.6、httponly=False:只能只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

注意:cookie可以将字符串进行salt加解密,写法如下:

obj = HttpResponse('s')
obj.set_signed_cookie('username',"kangbazi",salt="asdfasdf")

request.get_signed_cookie(
'username',salt="asdfasdf")

 cookie的基本用法

def cookie(request):
    request.COOKIES.get('username111')
    response=render(request,'index.html')
    response=redirect('/index/')
    # 设置cookie值,关闭浏览器失效
    response.set_cookie('key',"value")
    # 设置cookie值,超过N秒后失效
    response.set_cookie('username111','value',max_age=10)
    # 设置cookie值,从当前时间算起,经过N秒之后失效
    import datetime
    current_date=datetime.datetime.utcnow()
    current_date=current_date+datetime.timedelta(seconds=5)
    response.set_cookie('username111','value',expires=current_date)

实例:带有装饰器的cookie

def auth(func):
    def inner(request,*args,**kwargs):
        v=request.COOKIES.get('username111')
        if not v:
            return redirect('/login/')
        return func(request,*args,**kwargs)
    return inner
@auth
def index(request):
    # 获取当前已经登录的用户
    v=request.COOKIES.get('username111')
    return render(request,'index.html',{'current_user':v})

from django import views
from django.utils.decorators import method_decorator
@method_decorator(auth,name
='dispatch') class Order(views.View): def get(self,request): v=request.COOKIES.get('username111') return render(request,'index.html',{'current_user':v}) def post(self,request): v=request.COOKIES.get('username111') return render(request,'index.html',{'current_user':v})

 举例:通过帐号登录服务器后,服务器端对cookie进行username标识,等客户端下一次访问时候,服务器端先提取cookie的username,如果不为空,表示为已登录帐号

 1 def login(request):
 2     if request.method=="GET":
 3         return render(request,'login.html')
 4     if request.method=="POST":
 5         u=request.POST.get('username')
 6         p=request.POST.get('pwd')
 7         dic=user_info.get(u)
 8         if not dic:
 9             return render(request,'login.html')
10         if dic['pwd']==p:
11             res= redirect('/index/')
12             # res.set_cookie(key, value, ...),(键,值)
13             res.set_cookie('username111',u,max_age=10)
14             return res
15         else:
16             return render(request,'login.html')
17 
18 def index(request):
19     # 获取当前已经登录的用户
20     v=request.COOKIES.get('username111')
21     if v:
22         return render(request,'index.html',{'current_user':v})
23     return redirect('/login/')

 

 

posted @ 2018-06-18 21:48  沐阳静枫  阅读(127)  评论(0编辑  收藏  举报