session中保存登陸狀態:
優:整個應用可以從session中獲取用戶信息,並且查詢時很方便.在session中保存用戶信息是不可缺少的(web應用中)
缺:session中不宜保存大量信息,會增減內存消耗量
cookie中保存登陸狀態:
優:數據保存在客戶端,方便用戶下次登錄.如:”記住我“功能
缺:安全性不高,一般都是講數據加密后保存在cookie中
memcache應用主要體現在對大量數據的cache,如:將經常用到的數據保存在memcache中,減少對數據庫的訪問次數,在web應用中也是不可缺少的
缺:當cache爆掉后,造成數據丟失
從效率考慮:cookie > memcache > 數據庫
cookie對服務器端負載沒影響,如果加密、解密會多消耗一點點cpu。帶寬倒是會消耗得多一點,同域名下的所有http request header都會附帶cookie,所以在大流量下,把js、css、圖片放到另外一個域名下會節約掉這部分流量。
memcache會占用一些服務器內存
數據庫連接本來就是典型的瓶頸,能免則免
從安全性考慮:memcache/數據庫 > cookie
cookie存放在客戶端,需要考慮的安全性比較多一點
memcache、數據庫都在服務器端,相對cookie來說會稍微安全點
從服務器可擴展性考慮:cookie > memcache/數據庫
如果有多台后端服務器,就需要共享session數據
memcache、數據庫都可以做到在多台服務器之間共享session,但是容易形成單點瓶頸,大負載下需要考慮存儲路由之類
cookie完全不需要在服務器端共享session數據,與REST無狀態風格暗合
可擴展性這個點也不是絕對,如果用nginx的ip_hash方式組織多個后端upstream就不需要共享session,但這些都需要后端架構上的考慮和設計,而cookie則完全沒有這方面的擴展性問題
增補:cookie其實也不是在擴展性上沒有任何問題需要考慮,說“完全沒有”有點絕對了,可擴展性這種事情,復雜度比較高,需要實際問題實際分析。在比較簡單理想的情況下,cookie的可擴展性會比較好點