27.蛤蟆筆記go語言——session和資料存放區

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

27.蛤蟆筆記go語言——session和資料存放區

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

session和 cookie

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和cookie的目的相同,都是為了克服http協議無狀態的缺陷,但完成的方法不同。session通過cookie,在用戶端儲存session id,而將使用者的其他會話訊息儲存在服務端的session對象中,與此相對的,cookie需要將所有資訊都儲存在用戶端。因此cookie存在著一定的安全隱患,例如本地cookie中儲存的使用者名稱密碼被破譯,或cookie被其他網站收集(例如:1. appA主動設定域B cookie,讓域B cookie擷取;2. XSS,在appA上通過javascript擷取document.cookie,並傳遞給自己的appB)。

Go如何使用 session

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

•產生通用唯一識別碼(sessionid);

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

•將session的全域唯一標示符發送給用戶端。

Session ID是用來識別訪問Web應用的每一個使用者,因此必須保證它是全域唯一的(GUID)

預防 session劫持

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

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

 

 

 

 

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.