cookie的理解能夠爲,存放在用戶瀏覽器上的一個文件,裏面是鍵值對數據,用於跟服務端通信。前端能夠經過jquery cookie插件設置和讀取,後端直接設置html
一、獲取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: 後臺控制過時時間
|
二、設置Cookie:python
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,如設置和獲取。jquery
後端設置加密的cookie:django
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:瀏覽器
1 from django.shortcuts import render,HttpResponse,redirect 2 3 dic = { 4 "tom":{"pwd":'123'}, 5 "lily":{"pwd":'111'} 6 } 7 def login(request): 8 if request.method=="GET": 9 return render(request,'login.html') 10 u=request.POST.get('user') 11 pwd=request.POST.get('pwd') 12 if dic.get(u): 13 if dic[u]["pwd"]==pwd: 14 res=redirect('/home') 15 # res.set_cookie('user1',u) #不設置緩存有效時間,瀏覽器重啓後失效 16 # res.set_cookie('user1',u,max_age=5) #設置max_age指定多少秒後失效 17 import datetime 18 curr_time=datetime.datetime.now() 19 expire_time=curr_time + datetime.timedelta(seconds=5) 20 print(curr_time,expire_time) 21 res.set_cookie('user1',u,expires=expire_time) #設置max_age指定多少秒後失效 22 return res 23 else: 24 return redirect('/login') 25 return redirect('/login') 26 27 def home(request): 28 v = request.COOKIES['user1'] 29 if not v: 30 return render(request,'login.html') 31 32 33 return render(request,'home.html',{"curr_user":v})
templates:緩存
1 login.html 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <meta charset="UTF-8"> 6 <title>Title</title> 7 </head> 8 <body> 9 <form action="/login" method="post"> 10 <input type="text" name="user" placeholder="用戶名" /> 11 <input type="text" name="pwd" placeholder="密碼" /> 12 <input type="submit"/> 13 </form> 14 </body> 15 </html> 16 17 home.html 18 <!DOCTYPE html> 19 <html lang="en"> 20 <head> 21 <meta charset="UTF-8"> 22 <title>Title</title> 23 </head> 24 <body> 25 <h1>歡迎你,{{ curr_user }}</h1> 26 </body> 27 </html>
額外功能views:cookie
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})
...app