簡述cookie和session機制

首先來說說HTTP協議,我們知道HTTP協議是無狀態的,意思就是說我們每一次發出的HTTP請求之間都是沒有關聯的,對於服務且而言,就算是同一個人在不停的發出HTTP請求訪問網頁,服務器也不知道是同一個人在訪問。

但是在很多網頁中都涉及到了登錄註冊的功能,用戶登錄後,就算請求該網站的其他頁面,服務器也都會知道是你這個用戶,從而返回相應的網頁給你。但是前面說到了HTTP協議是無狀態的,那麼這是怎麼實現的呢?這就是使用了cookie和session的機制。

如何要讓無法識別你的服務器變得能夠識別你,思考一下,貌似可以用一個標記來告訴服務器訪問的是你。

下面來介紹cookie和session的機制。

cookie是客戶端用來保存用戶信息的機制。我們想象一下,如果我們註冊一個賬號之後,在服務端就會保存我們的賬戶和密碼。我們登錄了之後,如果我們將賬戶和密碼都放在cookie中,每次訪問的時候都將這個cookie攜帶上,那麼服務器端就去尋找對應的用戶,如果找到了表示該用戶是登錄狀態的,並返回相應的頁面,這樣不是就實現了保持登錄狀態的功能了嗎?

這樣在功能上是沒有問題的,是可以實現的,但是存在一個很大的問題,那就是安全性!我們知道cookie是保存在客戶端的,也就是我們本地的終端上,比如手機,電腦。而手機和電腦的安全性相對服務器而言是不太安全的,因爲手機和電腦很有可能遺失或者中病毒等等狀況,如果你的cookie被其他人獲取到了,那麼你的賬號信息就泄露了。

針對這種安全性的問題,我們引入了session的概念,session是服務端用來保存用戶信息的機制。當用戶在登錄了賬戶後,服務端會將用戶信息加密保存在session當中,同時隨機生成一個session_id與該session相關聯,然後在服務端返回頁面給客戶端的時候,一併將該session_id返回給客戶端,客戶端通常將session_id保存在cookie中,每次請求的時候,只需要攜帶這個cookie就相當於攜帶上了session_id,服務端會自動根據session_id找到相應的用戶,這樣就實現了保持登錄狀態(保持會話)的功能,而在我們退出登錄後,服務端的session以及對應的session_id就會被刪除掉。同時session也是有過期時間的。

對於服務端而言,保存session的方式有多種,可以存在文件當中,可以存在數據庫當中,也可以存在內存當中。

下面來說下cookie和session的區別:

  • cookie數據存儲在客戶端,session數據存儲在服務端
  • session相對cookie更加安全
  • 當訪問用戶增多時,session會更多的消耗服務器的性能
  • 單個cookie保存的數據不能超過4K,而session沒有限制
     
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章