衆所周知,http的鏈接是無狀態的。瀏覽器
HTTP無狀態協議是指協議對於事務處理沒有記憶能力。缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。tomcat
通俗一點講就是你每次請求服務器的時候,它並不知道你是誰,但實際上如今的網站並非這樣的,由於它們使用了cookie和session來輔助服務器記住你是誰,簡單來說這二者就是你進入這個網站的鑰匙。關於cookie和session的具體內容和差異,能夠去找度娘聊聊。服務器
可能有的同窗會有疑問,我在作網站開發的時候並無設置cookie啊,那是怎麼識別用戶的呢?cookie
其實在你首次登錄某個網站的,沒有任何cookie的時候(首次登錄或者清除),服務器會給你返回一個自生成的id(tomcat默認的叫JSESSIONID,百度的叫BAIDUID,簡書的叫_session_id,固然每一個均可能不同,這個是能夠自定義的)cookie值寫入你的瀏覽器。那這個sessionid(如下都會這麼叫)就是你進入網站的鑰匙(ps:若是你的瀏覽器禁止或未啓用cookie功能,那麼這個值就會以 http://url;jsessionid=9A8E07911E199FB356720FA4D2F76162
這種形式傳遞)。當你登錄的時候,請求會攜帶這個cookie值傳入後臺。session
通常登錄後臺的處理就是若是用戶登錄成功,那麼就將用戶id或者。。。保存至session中,那這樣就生成了一條識別鏈。 網站
大概的解釋一下:當程序須要爲某個客戶端的請求建立一個session時,服務器首先檢查這個客戶端的請求裏是否已包含了一個session標識----稱爲sessionid,若是已包含則說明之前已經爲此客戶端建立過session,服務器就按照sessionid把這個session檢索出來使用(檢索不到,會新建一個),若是客戶端請求不包含sessionid,則爲此客戶端建立一個session而且生成一個與此session相關聯的sessionid,sessionid的值應該是一個既不會重複,又不容易被找到規律以仿造的字符串,這個sessionid將被在本次響應中返回給客戶端保存。以後的每次訪問都會攜帶上這個sessionid,而後查找對應的session和session中的值,服務器進行登錄判斷和權限判斷。url
關閉瀏覽器、長時間沒有請求服務器、註銷登錄,這個時候服務器會把該sessionid從內存中清除掉,這個時候若是咱們再去請求服務器,sessionid已經不存在了,因此服務器並無在內存中找到對應的 sessionid,因此會再產生一個新的sessionid,這個時候通常咱們又要再登陸一次。 code
細心的同窗會發現,那麼是否是意味着,若是我拿到了你這個sessionid我就能夠冒充你來訪問這個網站了?沒有錯,若是網站沒有很好的防禦,確實能夠這麼作。具體怎麼實現我這就不太方便說了,感興趣也能夠度娘cookie竊取欺騙和攻擊。事務
因此請各位同窗保護好本身的cookie,不要輕易被偷竊走哦。內存
轉載請標明出處