一.Cookie 和 Session介紹:
Cookie:
Cookie實際上是一小段的文本信息。客戶端請求服務器,如果服務器需要記錄該用戶狀態,就使用response向客 戶端瀏覽器頒發一個Cookie。客戶端瀏覽器會把Cookie保存起來。當瀏覽器再請求該網站時,瀏覽器把請求的網址連同該Cookie一同提交給服務 器。服務器檢查該Cookie,以此來辨認用戶狀態。服務器還可以根據需要修改Cookie的內容。
Session:
Session是另一種記錄客戶狀態的機制,不同的是Cookie保存在客戶端瀏覽器中,而Session保存在服務器上。客戶端瀏覽器訪問服務器的時候,服務器把客戶端信息以某種形式記錄在服務器上。這就是Session。客戶端瀏覽器再次訪問時只需要從該Session中查找該客戶的狀態就可以了。
如果說Cookie機制是通過檢查客戶身上的“通行證”來確定客戶身份的話,那麼Session機制就是通過檢查服務器上的“客戶明細表”來確認客戶身份。Session相當於程序在服務器上建立的一份客戶檔案,客戶來訪的時候只需要查詢客戶檔案表就可以了。
二.Cookie:
1.設置cookie
def index(request):
response = render_to_response("index.html") #變量指出響應
response.set_cookie("name","laobian")#設置cookie
# key, 鍵
# value='', 值
# max_age=None, 壽命,秒
# expires=None, 過期時間,和壽命衝突
# path='/', cookie起作用的範圍
# domain=None, cookie起作用的域名
# secure=False, 是否用https傳輸cookie
# httponly=False, 只用用http傳輸cookie
return response #返回含有cookie的響應
2.校驗cookie
1.先獲取cookie
2.進行邏輯判斷
from django.http import HttpResponse
def newList(request):
name = request.COOKIES.get("name") # 獲取cookie --->1<---
if name: # 進行邏輯判斷 --->2<---
articles = Article.objects.order_by("-time")
return render_to_response("newList.html",locals())
else:
return HttpResponse("老邊呢?")
3.刪除cookie
from django.http import HttpResponse
def newList(request):
name = request.COOKIES.get("name")
if name:
articles = Article.objects.order_by("-time")
response = render_to_response("newList.html",locals())
response.delete_cookie("name") # 刪除cookie
return response
else:
return HttpResponse("老邊呢?")
三.Session:
1.設置session
def index(request):
response = render_to_response("index.html") #變量指出響應
request.session["username"] = "laobian" #設置session
response.set_cookie("name","laobian") #設置cookie
# key, 鍵
# value='', 值
# max_age=None, 壽命,秒
# expires=None, 過期時間,和壽命衝突
# path='/', cookie起作用的範圍
# domain=None, cookie起作用的域名
# secure=False, 是否用https傳輸cookie
# httponly=False, 只用用https傳輸cookie
return response #返回含有cookie的響應
2.獲取和刪除session:
from django.http import HttpResponse
def newList(request):
name = request.COOKIES.get("name")
session_name = request.session.get("username") #獲取session
del request.session["username"] #刪除session
if name:
articles = Article.objects.order_by("-time")
response = render_to_response("newList.html",locals())
response.delete_cookie("name")
return response
else:
return HttpResponse("老邊呢?")
Cookie 和session在django當中具體的使用
如果網站涉及到了cookie登錄校驗
除了
1、login 登錄
2、Register 註冊
3、404
總結:
1.cookie與session的區別:
cookie保存在客戶端,未設置存儲時間的cookie爲會話cookie保存在瀏覽器的進程開闢的內存中,當瀏覽器關閉後會話cookie也會被刪除;設置了存儲時間的cookie保存在用戶設備的磁盤中直到過期。
session保存在服務器端,存儲在IIS的進程開闢的內存中。
2.cookie與session的聯繫:
當服務器端生成一個session時就會向客戶端發送一個cookie保存在客戶端,這個cookie保存的是session的sessionId。這樣才能保證客戶端發起請求後客戶端已經登錄的用戶能夠與服務器端成千上萬的session中準確匹配到已經保存了該用戶信息的session,同時也能夠確保不同頁面之間傳值時的正確匹配。
注:爲了防止客戶端禁用了cookie而無法使用session的情況可以把sessionId和其他用戶信息重寫到url中,每次請求都在url中附帶sessionId和用戶信息(不包含用戶的敏感信息)