使用Django設置Cookie


Cookie機制:將少量數據存放在客戶端比如瀏覽器中
Django寫cookie:
set_cookie(key, value='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=False)
key: cookie的name
value:cookie的值
max_age:cookie存活時間,單位是秒
expires:具體過期時間
path:cookie的訪問路徑,只有在某個路徑下訪問
domain:域名,只有在某個域名下訪問
secure:安全
httpoly:如果為True那么js就不能獲取cookie

set_signed_cookie(key, value, salt='', max_age=None, expires=None, path='/', domain=None, secure=None, httponly=True)設置加密的cookie,salt是秘鑰

# 設置
def set_cookie(request):
t = request.GET.get('type')
print(type(t))
t = int(t)
template = loader.get_template("test_cookie.html")
response = HttpResponse(template.render())
if t == 1: # 設置key-valuecookie
response.set_cookie("test_cookie", "Hello World, 上海sxt".encode(encoding="utf-8"))
elif t == 2: # 設置過期時間
response.set_cookie("cookie_max_age", 123, max_age=10)
elif t== 3: #設置expires,會讓max_age無效
import datetime
response.set_cookie("cookie_expires", 234, max_age=10000, expires=datetime.datetime(2020, 12, 1))
elif t == 4: # 設置path,只能在設置的路勁下訪問,不同路徑下key相同也是兩個cookie, path默認/是根路徑都可以訪問
response.set_cookie("cookie_path1", 1234, path="/polls/redirectTest2/")
elif t == 5: # 設置域名,只能在當前域名下訪問,如果是頂級域名,那么子域名下都能訪問
response.set_cookie("cookie_domain", 3455, domain="www.shsxt.com")
elif t == 6: # 設置安全secure,只能在https中進行測試
response.set_cookie("cookie_secure", 333, secure=True)
elif t == 7: # 設置httponly,不能用js操作cookie
response.set_cookie("cookie_httponly", 3443, httponly=True)
return response

寫入cookie時,如果出現中文,而且瀏覽器客戶端需要讀取,那么需要將中文的value進行轉碼,使用的是urllib下的parse下的quote函數進行轉碼,然后瀏覽器js聽過decodeURIComponent()進行轉碼即可


讀取Cookie:
1、使用request.COOKIES.get(key) #根據Key值獲取value值,如果加密的話那就是加密的value
2、如果是加密的cookie使用request.get_signed_cookie(key)的value
#讀所有的cookie
def read_cookie(request):
cookies = request.COOKIES
key = request.GET.get('key')
ty = request.GET.get('type')
if not ty:
for k, v in cookies.items():
print("cookie的key值:%s, value值:%s" % (k, v))
return render(request, "cookie_read.html", {'cookies': cookies})
else:
return HttpResponse("獲取到的cookie值:%s" % cookies.get(key))


#讀取某個cookie
def read_some_cookie(request):
key = request.GET.get('key')
salt = request.GET.get('salt', '')
value = request.get_signed_cookie(key, salt=salt)
return HttpResponse("獲取到的cookie值:%s" % value)


刪除Cookie:
def delete_cookie(request):
key = request.GET.get('key')
response = HttpResponse("刪除%s的cookie" % key)
response.delete_cookie(key)
return response

調用response里面的delete_cookie(key)刪除cookie,實際上就是將此cookie設為過期

 

js操作Cookie
1、手動編寫方法,利用document.cookie

2、使用jQuery插件


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Js Cookie操作</title>
</head>
<body>
<button onclick="setCookie('test11', 'test', 1)">設置cookie</button>
<button onclick="alert(getCookie('test11'))">獲取cookie</button>
<button onclick="deleteCookie('test11')">刪除cookie</button>

<button id="setCookieBtn">jQuery設置cookie</button>
<button id="getCookieBtn">jQuery獲取cookie</button>
<button id="delCookieBtn">刪除cookie</button>

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdn.bootcss.com/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>

<script>
// 設置cookie
function setCookie(c_name, value, expiredays) {
var exdate = new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.cookie = c_name + "=" + encodeURIComponent(value) +
((expiredays == null) ? "" : ";expires=" + exdate.toUTCString())
+ ";path=/"
}

// 獲取cookie
function getCookie(c_name) {
if (document.cookie.length < 0) {
return "";
}
c_start = document.cookie.indexOf(c_name + "=")
if (c_start < 0) {
return "";
}

c_start = c_start + c_name.length + 1
c_end = document.cookie.indexOf(";", c_start)
if (c_end == -1) {
c_end = document.cookie.length
}
return decodeURIComponent(document.cookie.substring(c_start, c_end))
}

// 刪除cookie
function deleteCookie(c_name){
setCookie(c_name, "", -1);
}

$(document).ready(function(){
// 設置cookie
$("#setCookieBtn").click(function(){
$.cookie('login', 'John', { expires: 7, path: '/' })
})

// 獲取Cookie
$("#getCookieBtn").click(function(){
val = $.cookie('login')
alert(val)
})

// 刪除Cookie
$("#delCookieBtn").click(function(){
$.removeCookie('login')
})
})

</script>

</body>
</html>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM