Cookie 简单设置使用

时间:2023-11-11 14:56:08

cookie的理解可以为,存放在用户浏览器上的一个文件,里面是键值对数据,用于跟服务端通讯。前端可以通过jquery cookie插件设置和读取,后端直接设置

1、获取Cookie:

1
2
3
4
5
6
request.COOKIES['key']
request.get_signed_cookie(key, default=RAISE_ERROR, salt='', max_age=None)
    参数:
        default: 默认值
           salt: 加密盐
        max_age: 后台控制过期时间

2、设置Cookie:

1
2
3
4
5
6
7
8
9
10
11
12
13
rep = HttpResponse(...) 或 rep = render(request, ...)
rep.set_cookie(key,value,...)
rep.set_signed_cookie(key,value,salt='加密盐',...)
    参数:
        key,              键
        value='',         值
        max_age=None,     超时时间
        expires=None,     超时时间(IE requires expires, so set it if hasn't been already.)按日期时间算
        path='/',         Cookie生效的路径,/ 表示根路径,特殊的:跟路径的cookie可以被任何url的页面访问
        domain=None,      Cookie生效的域名
        secure=False,     https传输,网站走https时要加上
        httponly=False    只能http协议传输,无法被JavaScript获取(不是绝对,底层抓包可以获取到也可以被覆盖)

由于cookie保存在客户端的电脑上,所以,JavaScript和jquery也可以操作cookie,如设置和获取。

后端设置加密的cookie:

res=redirect('/home')
res.set_signed_cookie('user1',u,max_age=5,salt='123')
后端获取加密cookie:
v = request.get_signed_cookie(key='user1',salt='123')

简单例子:

views:

 from django.shortcuts import render,HttpResponse,redirect

 dic = {
"tom":{"pwd":''},
"lily":{"pwd":''}
}
def login(request):
if request.method=="GET":
return render(request,'login.html')
u=request.POST.get('user')
pwd=request.POST.get('pwd')
if dic.get(u):
if dic[u]["pwd"]==pwd:
res=redirect('/home')
# res.set_cookie('user1',u) #不设置缓存有效时间,浏览器重启后失效
# res.set_cookie('user1',u,max_age=5) #设置max_age指定多少秒后失效
import datetime
curr_time=datetime.datetime.now()
expire_time=curr_time + datetime.timedelta(seconds=5)
print(curr_time,expire_time)
res.set_cookie('user1',u,expires=expire_time) #设置max_age指定多少秒后失效
return res
else:
return redirect('/login')
return redirect('/login') def home(request):
v = request.COOKIES['user1']
if not v:
return render(request,'login.html') return render(request,'home.html',{"curr_user":v})

templates:

 login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/login" method="post">
<input type="text" name="user" placeholder="用户名" />
<input type="text" name="pwd" placeholder="密码" />
<input type="submit"/>
</form>
</body>
</html> home.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>欢迎你,{{ curr_user }}</h1>
</body>
</html>

额外功能views:

def page(request):
list = [] #生成要发给前端的数据列表
for i in range(1,779):
list.append(i) cur_page = request.GET.get('page')
if not cur_page:
cur_page = 1
else:
cur_page = int(cur_page) obj = paginations.page_mod(data=list,cur_page=cur_page,dis_count=10,tray_len=7)
data = obj.per_page_data #分页后的内容
nav_str = obj.page_str("/page") #分布后的导航 return render(request,'page.html',{'list':data,'dis_list':nav_str})
dic = {
"tom":{"pwd":'123'},
"lily":{"pwd":'111'}
}
def login(request):
if request.method=="GET":
return render(request,'login.html')
u=request.POST.get('user')
pwd=request.POST.get('pwd')
if dic.get(u):
if dic[u]["pwd"]==pwd:
res=redirect('/home')
res.set_cookie('user1',u) #不设置缓存有效时间,浏览器重启后失效
# res.set_cookie('user1',u,max_age=5) #设置max_age指定多少秒后失效
res.set_cookie('user1',u,path='/home') #设置生效url,只在规定uri路径下才能获取当前设置的cookie
# import datetime
# curr_time=datetime.datetime.now()
# expire_time=curr_time + datetime.timedelta(seconds=5)
# print(curr_time,expire_time)
# res.set_cookie('user1',u,expires=expire_time) #设置max_age指定多少秒后失效
return res
else:
return redirect('/login')
return redirect('/login') def home(request):
v = request.COOKIES.get('user1')
if not v:
return render(request,'login.html') return render(request,'home.html',{"curr_user":v})

  ...