27 筆記go語言 session和資料儲存

2021-08-08 22:47:33 字數 1854 閱讀 7683

27.筆記go語言——session和資料儲存

web開發中乙個很重要的議題就是如何做好使用者的整個瀏覽過程的控制,因為http協議是無狀態的,所以使用者的每一次請求都是無狀態的,我們不知道在整個web操作過程中哪些連線與該使用者有關,應該如何來解決這個問題呢?web裡面經典的解決方案是cookie和session,cookie機制是一種客戶端機制,把使用者資料儲存在客戶端,而session機制是一種伺服器端的機制,伺服器使用一種類似於雜湊表的結構來儲存資訊,每乙個**訪客都會被分配給乙個唯一的標誌符,即sessionid,它的存放形式無非兩種:要麼經過url傳遞,要麼儲存在客戶端的cookies裡.當然,你也可以將session儲存到資料庫裡,這樣會更安全,但效率方面會有所下降。

cookie,簡而言之就是在本地計算機儲存一些使用者操作的歷史資訊(當然包括登入資訊),並在使用者再次訪問該站點時瀏覽器通過http協議將本地cookie內容傳送給伺服器,從而完成驗證,或繼續上一步操作。

session,簡而言之就是在伺服器上儲存使用者操作的歷史資訊。伺服器使用session id來標識session,session id由伺服器負責產生,保證隨機性與唯一性,相當於乙個隨機金鑰,避免在握手或傳輸中暴露使用者真實密碼。但該方式下,仍然需要將傳送請求的客戶端與session進行對應,所以可以借助cookie機制來獲取客戶端的標識(即session id),也可以通過get方式將id提交給伺服器。

cookie是由瀏覽器維持的,儲存在客戶端的一小段文字資訊,伴隨著使用者請求和頁面在web伺服器和瀏覽器之間傳遞。使用者每次訪問站點時,web應用程式都可以讀取cookie包含的資訊。瀏覽器設定裡面有cookie隱私資料選項,開啟它,可以看到很多已訪問**的cookies

cookie是有時間限制的,根據生命期不同分成兩種:會話cookie和持久cookie;如果不設定過期時間,則表示這個cookie生命週期為從建立到瀏覽器關閉止,只要關閉瀏覽器視窗,cookie就消失了。這種生命期為瀏覽會話期的cookie被稱為會話cookie。會話cookie一般不儲存在硬碟上而是儲存在記憶體裡。

如果設定了過期時間(setmaxage(60*60*24)),瀏覽器就會把cookie儲存到硬碟上,關閉後再次開啟瀏覽器,這些cookie依然有效直到超過設定的過期時間。儲存在硬碟上的cookie可以在不同的瀏覽器程序間共享,比如兩個ie視窗。而對於儲存在記憶體的cookie,不同的瀏覽器有不同的處理方式。  

session在web開發環境下的語義又有了新的擴充套件,它的含義是指一類用來在客戶端與伺服器端之間保持狀態的解決方案。有時候session也用來指這種解決方案的儲存結構。session機制是一種伺服器端的機制,伺服器使用一種類似於雜湊表的結構(也可能就是使用雜湊表)來儲存息。

session的基本原理是由伺服器為每個會話維護乙份資訊資料,客戶端和服務端依靠乙個全域性唯一的標識來訪問這份資料,以達到互動的目的。當使用者訪問web應用時,服務端程式會隨需要建立session,這個過程可以概括為三個步驟:

•生成全域性唯一識別符號(sessionid);

•開闢資料儲存空間。一般會在記憶體中建立相應的資料結構,但這種情況下,系統一旦掉電,所有的會話資料就會丟失,如果是電子商務類**,這將造成嚴重的後果。所以為了解決這類問題,你可以將會話資料寫到檔案裡或儲存在資料庫中,當然這樣會增加i/o開銷,但是它可以實現某種程度的session持久化,也更有利於session的共享;

•將session的全域性唯一標示符傳送給客戶端。

session id是用來識別訪問web應用的每乙個使用者,因此必須保證它是全域性唯一的(guid)

session劫持是一種廣泛存在的比較嚴重的安全威脅,在session技術中,客戶端和服務端通過session的識別符號來維護會話, 但這個識別符號很容易就能被嗅探到,從而被其他人利用.它是中間人攻擊的一種型別。

目前go官方標準包裡面不支援session.

55 筆記go語言 go型別

很多人喜歡go語言的原因是簡單。go語言的型別也是設計的如此簡單。go語言預設定義了一些型別如boolean,numeric和string.這些預定義的型別用於構建其他複雜的型別,例如array,struct,pointer,slice,map,channel等。型別可以有乙個名字也可以沒有名字。命...

10 筆記go語言 併發

10.筆記go語言 併發 goroutine 是由 go 執行時環境管理的輕量級執行緒。go f x,y,z 開啟乙個新的 goroutine 執行 f x,y,z f x y 和 z 是當前 goroutine中定義的,但是在新的 goroutine 中執行 f goroutine 在相同的位址空...

34 筆記go語言 內建函式

34.筆記go語言 內建函式 預定義了少數函式,這意味著無需引用任何包就可以使用它們。close 用於channel通訊。使用它來關閉channel.delete 用於在map中刪除例項。len和cap 可用於不同的型別,len用於返回字串 slice和陣列的長度。new 用於各種型別的記憶體分配。...