(干货满满!)session和cookie作用原理,区别(史上最详细)
一、Cookie概念
在瀏覽某些 網站 時,這些網站會把 一些數據存在 客戶端 , 用于使用網站 等跟蹤用戶,實現用戶自定義 功能.
是否設置過期時間:
-
如果不設置 過期時間,則表示這個 Cookie生命周期為 瀏覽器會話期間 , 只要關閉瀏覽器,cookie就消失了.
-
這個生命期為瀏覽會話期的cookie,就是會話Cookie;
存儲:
-
一般保存在 內存,不在硬盤;
-
如果設置了過期時間, 瀏覽器會把cookie保存在硬盤上,關閉再打開瀏覽器, 這些cookie 依然有效直到 超過的設置過期時間;
-
存儲在硬盤上的Cookie可以在不同的瀏覽器進程間共享,比如兩個IE窗口。
原理:
如果瀏覽器使用的是 cookie,那么所有的數據都保存在瀏覽器端,
比如你登錄以后,服務器設置了 cookie用戶名(username),那么,當你再次請求服務器的時候,瀏覽器會將username一塊發送給服務器,這些變量有一定的特殊標記。服務器會解釋為 cookie變量。
所以只要不關閉瀏覽器,那么 cookie變量便一直是有效的,所以能夠保證長時間不掉線。
如果設置了的有效時間,那么它會將 cookie保存在客戶端的硬盤上,下次再訪問該網站的時候,瀏覽器先檢查有沒有 cookie,如果有的話,就讀取該 cookie,然后發送給服務器。
二、Session的概念
Session 是存放在服務器端的類似于HashTable結構(每一種web開發技術的實現可能不一樣,下文直接稱之為HashTable)來存放用戶數據;
作用:實現網頁之間數據傳遞,是一個存儲在服務器端的對象集合。
原理:系統在創建Session時將為其分配一個長長的字符串標識,以實現對Session進行管理與跟蹤。
session機制是一種服務器端的機制,服務器使用一種類似于散列表的結構(也可能就是使用散列表)來保存信息。
是否已經創建過session:
當程序需要為某個客戶端的請求創建一個session時,服務器首先檢查這個客戶端的請求里是否已包含了一個session標識(稱為session id),
如果已包含則說明以前已經為此客戶端創建過session,服務器就按照session id把這個session檢索出來…使用(檢索不到,會新建一個),
如果客戶端請求不包含session id,則為此客戶端創建一個session并且生成一個與此session相關聯的session id,
session id的值應該是一個既不會重復,又不容易被找到規律以仿造的字符串,這個session id將被在本次響應中返回給客戶端保存。
(總結: 創建一個session時,服務器看這個客戶端 是否包含session標識, 是的話按照session id把session檢索出來,否則就得 新建一個.)
Session ID的保存方法:
使用Cookie來保存,這是最常見的方法。
服務器通過設置Cookie的方式將Session ID發送到瀏覽器。
如果我們不設置這個過期時間,那么這個Cookie將不存放在硬盤上,當瀏覽器關閉的時候,Cookie就消失了,這個Session ID就丟失了。
如果我們設置這個時間為若干天之后,那么這個Cookie會保存在客戶端硬盤中,即使瀏覽器關閉,這個值仍然存在,下次訪問相應網站時,同 樣會發送到服務器上。
cookie 和session 的區別:
cookie數據存放在客戶的瀏覽器上,session數據放在服務器上.
?
簡單的說,當你登錄一個網站的時候,如果web服務器端使用的是session,那么所有的數據都保存在服務器上面,
?
客戶端每次請求服務器的時候會發送 當前會話的session_id,服務器根據當前session_id判斷相應的用戶數據標志,以確定用戶是否登錄,或具有某種權限。
?
session_id是服務 器和客戶端鏈接時候隨機分配的,使用Cookie保存
cookie不是很安全
session會在一定時間內保存在服務器上。當訪問增多,會比較占用你服務器的性能,此時應考慮反序列化——>傳送門
總結
以上是生活随笔為你收集整理的(干货满满!)session和cookie作用原理,区别(史上最详细)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【图示,简单明了】HttpServlet
- 下一篇: 【已解决】报错:cannot be re