1. 程式人生 > >session和cookie的學習總結

session和cookie的學習總結

seesion和cookie的使用和學習總結

問題的提出:如何讓使用者登陸了系統之後,在以後的一段的時間內不再需要登陸認證了呢?

首先要需要知道為什麼會有這個問題,我們先來了解一下web伺服器和瀏覽器之間的互動方式。


眾所周知,web伺服器和瀏覽器之間都是使用http協議來進行互動的,那麼我們就先來簡單瞭解一下http協議吧
http協議是建立在tcp上的一個應用層協議,而且它的訊息體都是可見的asc字元,
瀏覽器向web伺服器發出“GET”“PUT”的http訊息報。
web伺服器依據瀏覽器的請求回覆一系列的內容。
http有個最重要的特點是無狀態的,什麼是無狀態的呢?
無狀態就是表示瀏覽器向伺服器發起一次tcp連線,伺服器向瀏覽器回覆了之後,tcp的連線就斷開了,當瀏覽器再次訪問的時候,伺服器就不記得你了,就像失憶了一樣,這就是說,伺服器不管你是誰,你來了我就根據你的請求回覆你就行了,這就叫做無狀態。由於http的無狀態性,伺服器會把每一次的連線都當做未知的請求,所以一般的情況下,你就不能一次登入,多次免登陸。
好了,這下我們知道了問題的由來,那麼要怎麼才能解決我們提出的問題呢?我第二次訪問伺服器的時候,伺服器他妹兒的就不認識我了,那我怎麼才能不需要登入就可以進行活動呢?
我們來轉換一下想法:
比如說你去網咖上網,每一次都需要叫網管,給網管錢,然後讓網管開機。
我們的問題和上面那個例子做對比,我們把網管那部分比喻成登陸系統,把你上網的部分比喻成伺服器提供的服務,我們現在不想每次都叫網管了,怎麼辦?
有了生活中的例子做比較就方便解決我們在文章頭提出的問題了,我們怎麼樣才能一次登入,多次享用呢?
我們都知道網咖有個東西叫做會員卡,你只需要辦理一張會員卡,衝一些錢進去,你從此就不需要叫網管了進去直接找臺電腦上網就行了。所以同理,我們需要伺服器給我們一個會員卡,這樣子每次上網只需要亮一下會員卡就行了。
會員卡是網咖提供的,所以我們要解決上面的問題,就要求伺服器必須有能力提供“會員卡”的功能,
會員卡是放在我們身上的,所以我們要解決上面的問題,也要求客戶端有存放“會員卡”的功能。
這下子我們就明瞭。我們要實現這樣的功能就要求伺服器和客戶端分別滿足上面的要求就是了。
所以,我們的主角登場了,cookie&seesion
cookie就是伺服器放在客戶端的一小塊文字,cookie就是我們的會員卡! cookie在客戶端是如何存放的呢?在客戶端裡面會將使用者訪問過的所有的cookie存放在一起,有點像“卡包”的感覺,每當客戶端訪問伺服器的時候,客戶端就直接把“卡包”給伺服器,伺服器需要在卡包裡面找自己的那張“會員卡”。
session也是依靠cookie實現的,
從上面關於cookie的介紹知道了,cookie確實不怎安全,因為它把所以的會員卡資訊都儲存在客戶那裡,客戶還會把“卡包”一次性的給別人?!!
這怎麼能忍?!
所以session就是為了解決這個問題出生的。
session就是直接給客戶端一個連客戶端都看不懂的一大串的字串,相當於全球唯一的id,這id號就別人都仿造不出來的,只有本伺服器擁有。這是為了防止別人假冒。有了個全世界人民除了本服務看得懂的id,伺服器就可以有一個map,對應的id可以存在客戶無數多特有的資訊。
這其實本質和cookie一樣,只是說原先有客戶端放具體內容,變成了客戶端放一個指標,以上內容是本人是這麼理解的,如果有錯誤請不吝指出

現在可以解決問題了,
首先,使用者訪問我們的系統的時候,我們先檢視他卡包中有沒有我們的會員卡,如果有,就讓他直接通過了,如果沒有,那麼就需要驗證使用者,使用者驗證通過之後馬上給他辦張會員卡,那麼他在第二次訪問的時候我們就知道他可以直接通過了,我們就不需要驗證了。蛤蛤 問題解決了,是不是感覺too young too simple~