Cookie和Session

XieBuWan發表於2024-10-31

#Cookie

簡介

###什麼是Cookie

  • HTTP是無狀態的協議,伺服器不能記錄瀏覽器的訪問狀態,也就是說伺服器不能區分兩次請求是否是一個客戶端,這樣的設計嚴重的阻礙了web程式的設計。
  • Cookie是解決HTTP協議無狀態的方案之一。
  • Cookie實際上就是伺服器儲存在瀏覽器上的一段資訊,瀏覽器有了Cookie之後,每次向伺服器傳送請求時都會同時將該資訊傳送給伺服器,伺服器在收到請求之後,就可以根據該資訊處理請求。
  • Cookie由伺服器建立,併傳送給瀏覽器,最終由瀏覽器儲存。

###Cookie的用途

  • 電商網站的購物車
  • 保持使用者登入狀態

###Cookie的缺點

  • Cookie作為請求或者響應的報文進行傳送,無形中增加了網路流量
  • Cookie使用明文傳送安全性差
  • 各個瀏覽器對Cookie有限制,每個網站大概只能儲存20個Cookie
  • 可以在瀏覽器禁止Cookie
    ###Cookie的使用
  • this.Ctx.SetCookie("username", "admin")
    1.設定Cookie,引數一為Cookie名稱,引數二為Cookie值
    2.設定Cookie是不能存在中文,如果存在中文雖然可以設定成功,但是不能取出.
  • 取出Cookie:this.Ctx.GetCookie("username")
  • this.Ctx.SetCookie("username", "admin", 10)
    1.引數三為Cookie的存活時間,單位秒。
    2.如果不設定時間,Cookie只在本次回話有效,Beego預設存活3600秒。
  • this.Ctx.SetCookie("username", "admin", 60*60*60*60, "/demo2")
    1.Cooie的路徑是指告訴瀏覽器訪問那些網址時需要帶上該Cookie.
    2.瀏覽器會儲存很多網站的Cookie,比如百度的Cookie,新浪的Cookie,騰訊的Cookie,瀏覽器在訪問百度時不可能傳送新浪的Cookie,也不可能訪問每個網站都帶上所有的Cookie,所以我們需要為Cookie設定一個Path屬性,用於告訴瀏覽器何時需要帶上該Cookie。
    3.我們訪問的網站必須是Cookie儲存路徑的子集,在訪問伺服器時才會帶上該Cookie。
    4.如果是想設定Cookie的儲存路徑而不設定存活時間是不行的,因為SetCookie方法預設第三個引數是設定存活時間,第四個引數是設定儲存路徑。
    #Session

##Session是什麼

  • Session是一段儲存在伺服器上的資訊,當客戶端第一次訪問伺服器時建立Session,同時也建立一個名為beegosessionID,值為建立的Seesion的id的Cookie。
  • 這個beegoseesionID對應伺服器中的一個Session物件,通過它就可以獲取到儲存使用者資訊的Session。

##Seeion的必要性

  • 使用Cookie有一個非常大的侷限,如果Cookie很多,則無形的增加了客戶端與服務端的資料傳輸。
  • Cookie安全性差
  • 由於大部分瀏覽器對Cookie大小和數量有限制,所以不能在Cookie中儲存過多的資訊。

##Session的使用

  • Beego預設關閉Session,如果想要使用Session,需要在主函式中或配置檔案中開啟Session,分別為Beego.BConfig.WebConfig.Session.SessionOn = true,session = true
  • 設定Session: this.SetSession("username", "admin")
  • this.GetSession("username"),如果沒有獲取到Session和GetCookie不一樣,GetCookie會返回空字串,但是GetSession返回nil。
  • 通過this.DelSession("username")this.DestroySession()均可刪除Session,其區別在於DelSession刪除指定Session,而DestroySession刪除全session。
  • 設定Sesson的時候可以存在中文。Beego中的Session在當前回話預設存活3600秒,可以在主函式或配置檔案中設定Session的存活時間,分別為beego.BConfig.WebConfig.Session.SessionGCMaxLifetime,sessiongcmaxlifetime
  • 可以通過beego.BConfig.WebConfig.Session.SessionName = "hellobeegoid123"sessionname=hellobeegoid來設定session的名稱,如果同時在配置檔案和主函式中設定,主函式優先,應為beego先讀取配置檔案後執行主函式,所以主函式優先。

學院Go語言視訊主頁
https://edu.csdn.net/lecturer/1928

清華團隊帶你實戰區塊鏈開發
掃碼獲取海量視訊及原始碼 QQ群:721929980
在這裡插入圖片描述

相關文章