Django-cookie

Posted wang-wenhui

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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/)

 

 



以上是关于Django-cookie的主要内容,如果未能解决你的问题,请参考以下文章

基于Django-Cookie的CBV和FBV的用户验证装饰器

将Django-cookie sessionId链接到Channels 2.02连接?

Django - 学习目录

微信小程序代码片段

VSCode自定义代码片段——CSS选择器

谷歌浏览器调试jsp 引入代码片段,如何调试代码片段中的js