http請求是客戶端向服務器發送請求,服務器作出響應,可是有的時候服務器並不知道發出請求的客戶端是誰,如何理解這句話呢瀏覽器
若是客戶端A經過代理B鏈接到服務器,這時候A的IP是B分配的,若是這時候鏈接斷了,當客戶端再次連接到服務器的時候,IP又變了,這時候服務器以及是不一樣的客戶端,實際上仍是同一個客戶端安全
若是多個客戶端在同一個局域網經過路由向服務器發送請求,請求的IP均是同一個,這時候服務器覺得是同一個的客戶端其實是不一樣的客戶端服務器
所以如何對客戶端進行惟一的標識,是須要解決的問題cookie
解決方法:session
cookie:負載均衡
cookie是保存在本地終端的數據,cookie是由服務器生成,發送給瀏覽器,瀏覽器以kv的形式進行保存,下一次請求同一個網站的時候會把cookie信息發送給服務器。性能
cookie的組成有:名稱,值,有效域、路徑、失效時間、安全標誌網站
經過在http請求中攜帶的信息進行標識,cookie就是用來解決這個問題的。ui
服務器端返回給客戶端一個請求響應的時候,會包含set-cookies,意思是指示客戶端創建cookie,而且在後續的http請求中發送這個cookie直到這個cookie過時。spa
一個cookie的設置以及發送過程分爲如下四步:
客戶端發送一個http請求到服務器端
服務器端發送一個http響應到客戶端,其中包含Set-Cookie頭部
客戶端發送一個http請求到服務器端,其中包含Cookie頭部
服務器端發送一個http響應到客戶端
session:
session的意思是「會話」,客戶端與服務器的一次請求就產生一個session,服務器使用session將用戶的信息臨時保存在服務器上,用戶離開網站session就會銷燬。這種方式相對於cookie而言比較安全,可是也會存在問題,若是服務器作了負載均衡的話,那麼下一次操做到別的服務器,session就會丟失。
token:
token是「令牌」是用戶身份的驗證方式,包含:uid,time,sign
一、cookie數據存放在客戶的瀏覽器上,session數據放在服務器上。
二、cookie不是很安全,別人能夠分析存放在本地的COOKIE並進行COOKIE欺騙
考慮到安全應當使用session。
三、session會在必定時間內保存在服務器上。當訪問增多,會比較佔用你服務器的性能
考慮到減輕服務器性能方面,應當使用COOKIE。
四、單個cookie保存的數據不能超過4K,不少瀏覽器都限制一個站點最多保存20個cookie。
五、因此我的建議:
將登錄信息等重要信息存放爲SESSION
其餘信息若是須要保留,能夠放在COOKIE中
Session 是一種HTTP存儲機制,目的是爲無狀態的HTTP提供的持久機制。所謂Session 認證只是簡單的把User 信息存儲到Session 裏,由於SID 的不可預測性,暫且認爲是安全的。這是一種認證手段。 而Token ,提供的是 認證 和 受權 ,認證是針對用戶,受權是針對App 。其目的是讓 某App有權利訪問 某用戶 的信息。這裏的 Token是惟一的。不能夠轉移到其它 App上,也不能夠轉到其它 用戶 上。 轉過來講Session 。Session只提供一種簡單的認證,即有此 SID,即認爲有此 User的所有權利。是須要嚴格保密的,這個數據應該只保存在站方,不該該共享給其它網站或者第三方App。 因此簡單來講,若是你的用戶數據可能須要和第三方共享,或者容許第三方調用 API 接口,用 Token 。若是永遠只是本身的網站,本身的 App,用什麼就無所謂了。
token就是令牌,好比你受權(登陸)一個程序時,他就是個依據,判斷你是否已經受權該軟件;cookie就是寫在客戶端的一個txt文件,裏面包括你登陸信息之類的,這樣你下次在登陸某個網站,就會自動調用cookie自動登陸用戶名;session和cookie差很少,只是session是寫在服務器端的文件,也須要在客戶端寫入cookie文件,可是文件裏是你的瀏覽器編號.Session的狀態是存儲在服務器端,客戶端只有session id;而Token的狀態是存儲在客戶端。