1. 程式人生 > >cookie和session簡介

cookie和session簡介

一、解決的問題:

  能解決很多很多的問題,目前碰到的場景:1)沒有登入,不能看到登入後的其他頁面;2)沒有下單,不能看到下單成功的返回資訊.....等等。假如沒有cookie和session機制,http是無狀態的,那麼服務端就無法識別瀏覽器是不是首次登入,也就無法做出相應的判斷;

二、單獨使用cookie解決以上問題嗎?

  可以解決;以django為例,瀏覽器訪問django後臺,會預設傳送cookie值(其實就是一個鍵值對),此時的cookie比如是{“IDIDIDID”:"12345"},在django後臺的處理的過程中,對cookie進行一些操作(_set_cookie方法)新增一組鍵值對,此時的cookie值比如成了{“IDIDIDID”:"12345","name":"qinwei"},將cookie傳送給瀏覽器。當瀏覽器再次訪問後臺時,會攜帶新的cookie,那麼後臺就可以對其cookie中的值進行判斷,比如a = request.cookie.get("name"),if a == "qinwei" 返回一個登陸成功後才能展示的頁面。如果不攜帶“name”這個鍵,那麼肯定是首次登入,或者name這個鍵對應的值不是"qinwei",那麼也不能返回成功後才能展示的頁面,因為讓其返回到登入頁面。但是,如果僅僅使用cookie,那是不安全的,資訊都存在瀏覽器本地的機器,別人很容易拿到這個cookie檔案,後進行破壞性的操作。所有引入了session機制。

三、cookie和session協同使用:  

  session將資訊預設儲存在服務端資料庫的表中,而只給瀏覽器返回一把解鎖session的鑰匙(一組很長很亂的字串給cookie),即服務端傳送給瀏覽器的cookie比如{“sessionid”:"yetwcnbbcksioekmggaczxpokeuww};比如登入功能,當瀏覽器訪問後臺時,瀏覽器會攜帶cookie,當後臺匹配到正確的使用者名稱和密碼時,後臺可以對session進行一系列的操作,request.session['username']='qinwei',給session新加一組鍵值對,返回個人主介面。當瀏覽器直接調個人主介面url的時候,後臺這塊可以做判斷。a = request.session.get("username")   if a == 'qinwei' 那麼證明瀏覽器之前登入成功過,可以給它返回個人主介面。如果沒登入成功過或者壓根從來麼登入過,就不會有“username”這個鍵,我們就可以讓它跳轉到登入介面。