标签:second 保存 time request 存在 关系 登录 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/‘)
标签:second 保存 time request 存在 关系 登录 cookie 一个
原文地址:https://www.cnblogs.com/Wang-Wenhui/p/9196238.html